102. 二叉树的层序遍历 - 力扣(LeetCode)
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) return res;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {int size = queue.size();List<Integer> list = new ArrayList<>();for (int i = 0; i < size; i++) {TreeNode cur = queue.poll();list.add(cur.val);if (cur.left != null) queue.add(cur.left);if (cur.right != null) queue.add(cur.right);}res.add(new ArrayList<>(list));}return res;}
}
226. 翻转二叉树 - 力扣(LeetCode)
递归,前序遍历或者后序遍历都可以,想清楚交换的顺序
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode invertTree(TreeNode root) {if (root == null) return root;swap(root);invertTree(root.left);invertTree(root.right);return root;}private void swap(TreeNode root) {TreeNode tmp = root.left;root.left = root.right;root.right = tmp;}
}
后序遍历也可以,感觉后序遍历更好解释,先走到底,从下往上交换
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode invertTree(TreeNode root) {if (root == null) return root;// swap(root);invertTree(root.left);invertTree(root.right);swap(root);return root;}private void swap(TreeNode root) {TreeNode tmp = root.left;root.left = root.right;root.right = tmp;}
}
层序遍历
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode invertTree(TreeNode root) {if (root == null) return root;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {int size = queue.size();for (int i = 0; i < size; i++) {TreeNode cur = queue.poll();swap(cur);if (cur.left != null) queue.offer(cur.left);if (cur.right != null) queue.offer(cur.right);}}return root;}private void swap(TreeNode root) {TreeNode tmp = root.left;root.left = root.right;root.right = tmp;}
}
101. 对称二叉树 - 力扣(LeetCode)
递归:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {if (root == null) return true;return isSymmetric(root.left, root.right);}private boolean isSymmetric(TreeNode left, TreeNode right) {if (left == null && right == null) return true;if (left == null || right == null) return false;if (left.val != right.val) return false;return left.val == right.val && isSymmetric(left.left, right.right) && isSymmetric(left.right, right.left);}
}
迭代:类似层序遍历,不是层序遍历,是一次把两个元素两两比较
left == null && right == null的时候,继续循环
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {if (root == null) return true;Queue<TreeNode> queue = new LinkedList<>();queue.add(root.left);queue.add(root.right);while (!queue.isEmpty()) {int size = queue.size();for (int i = 0; i < size; i++) {TreeNode left = queue.poll();TreeNode right = queue.poll();if (left == null && right == null) continue;if (left == null || right == null || left.val != right.val) return false;queue.offer(left.left);queue.offer(right.right);queue.offer(left.right);queue.offer(right.left);}}return true;}
}