LeetCode--[树]--不定时更新
1._226_翻转二叉树
1.1链接
https://leetcode-cn.com/problems/invert-binary-tree/
1.2题目描述
1.3解题思路
1.4代码实现
java版本
四种实现方式
package 二叉树; import java.util.LinkedList; import java.util.Queue; /** * https://leetcode-cn.com/problems/invert-binary-tree/ * @author MJ Lee * */ public class _226_翻转二叉树 { //前序遍历方法 // public TreeNode invertTree(TreeNode root) { // if (root == null) return root; // // TreeNode tmp = root.left; // root.left = root.right; // root.right = tmp; // // invertTree(root.left); // invertTree(root.right); // // return root; // } //后序遍历方法 // public TreeNode invertTree(TreeNode root) { // if (root == null) return root; // // invertTree(root.left); // invertTree(root.right); // // TreeNode tmp = root.left; // root.left = root.right; // root.right = tmp; // // return root; // } //中序遍历方法 // public TreeNode invertTree(TreeNode root) { // if (root == null) return root; // // invertTree(root.left); // // TreeNode tmp = root.left; // root.left = root.right; // root.right = tmp; // // invertTree(root.left); // // return root; // } //层序遍历方法 public TreeNode invertTree(TreeNode root) { if (root == null) return root; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); TreeNode tmp = node.left; node.left = node.right; node.right = tmp; if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } return root; } }
2.计算二叉树的高度
2.1解题思路
递归方法
迭代方式--通过层序遍历来解决
2.2代码实现
java版本
递归方式
public int height2() { return height(root); } //递归方式 private int height(Node<E> node) { if (node == null) return 0; return 1 + Math.max(height(node.left), height(node.right)); }
非递归方式--迭代
// /非递归方式 --代 public int height() { if (root == null) return 0; // 树的高度 int height = 0; // 存储着每一层的元素数量 int levelSize = 1; Queue<Node<E>> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { Node<E> node = queue.poll(); levelSize--; if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } if (levelSize == 0) { // 意味着即将要访问下一层 levelSize = queue.size(); height++; } } return height; }
3.利用前序遍历打印树状结构
3.1题目描述
3.2代码实现
java版本
@Override public String toString() { StringBuilder sb = new StringBuilder(); toString(root, sb, ""); return sb.toString(); } private void toString(Node<E> node, StringBuilder sb, String prefix) { if (node == null) return; toString(node.left, sb, prefix + "L---"); sb.append(prefix).append(node.element).append("\n"); toString(node.right, sb, prefix + "R---"); }
4.判断一棵树是否是完全二叉树
4.1解题思路
4.2代码实现
java版本
public boolean isComplete() { if (root == null) return false; Queue<Node<E>> queue = new LinkedList<>(); queue.offer(root); boolean leaf = false; while (!queue.isEmpty()) { Node<E> node = queue.poll(); if (leaf && !node.isLeaf()) return false; if (node.left != null) { queue.offer(node.left); } else if (node.right != null) { // node.left == null && node.right != null return false; } if (node.right != null) { queue.offer(node.right); } else { // node.right == null leaf = true; } } return true; }
X._XXX_用栈实现队列
X.1链接
X.2题目描述
X.3解题思路
X.4代码实现
java版本
X._XXX_用栈实现队列
X.1链接
X.2题目描述
X.3解题思路
X.4代码实现
java版本
X._XXX_用栈实现队列
X.1链接
X.2题目描述
X.3解题思路
X.4代码实现
java版本
X._XXX_用栈实现队列
X.1链接
X.2题目描述
X.3解题思路
X.4代码实现
java版本
X._XXX_用栈实现队列
X.1链接
X.2题目描述
X.3解题思路
X.4代码实现
java版本
X._XXX_用栈实现队列
X.1链接
X.2题目描述
X.3解题思路
X.4代码实现
java版本
X._XXX_用栈实现队列
X.1链接
X.2题目描述
X.3解题思路
X.4代码实现
java版本
X._XXX_用栈实现队列
X.1链接
X.2题目描述
X.3解题思路
X.4代码实现
java版本