leetcode hot 100 刷题笔记
226. 翻转二叉树
前序遍历即可,每层递归交换左右子节点
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 class Solution { 11 public TreeNode invertTree(TreeNode root) { 12 // 前序遍历反转即可 13 preorder(root); 14 return root; 15 } 16 17 public void preorder(TreeNode node) { 18 if(node==null){ 19 return; 20 } 21 TreeNode left = node.left; 22 node.left = node.right; 23 node.right = left; 24 preorder(node.left); 25 preorder(node.right); 26 } 27 }
时间复杂度O(n),空间复杂度O(1).
104. 二叉树的最大深度
BFS即可
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode() {} 8 * TreeNode(int val) { this.val = val; } 9 * TreeNode(int val, TreeNode left, TreeNode right) { 10 * this.val = val; 11 * this.left = left; 12 * this.right = right; 13 * } 14 * } 15 */ 16 class Solution { 17 public int maxDepth(TreeNode root) { 18 if(root==null){ 19 return 0; 20 } 21 // BFS即可 22 Queue<TreeNode> queue = new LinkedList<TreeNode>(); 23 queue.add(root); 24 int count = 0; 25 while(!queue.isEmpty()){ 26 Queue<TreeNode> layer = new LinkedList<TreeNode>(); 27 for(TreeNode node:queue){ 28 if(node.left!=null) layer.add(node.left); 29 if(node.right!=null) layer.add(node.right); 30 } 31 count++; 32 queue = layer; 33 } 34 return count; 35 } 36 }
时间复杂度O(n),空间复杂度O(1).