NO.141 环形链表 简单
震惊!著名软件 Homebrew 的作者 Max Howell 在 面试 Google 被拒,竟然是因为不会这个!
Google:我们 90% 的工程师都用你写的软件(Homebrew),但你没法在白板上翻转二叉树,所以滚蛋吧
思路一:深度优先遍历 从根节点开始,交换左右子树,然后递归的交换左右子树的左右子树。终止条件是子树节点为空。
1 2 3 4 5 6 7 8 9 10 11 12
| public TreeNode invertTree(TreeNode root) { if (root ==null) return root; TreeNode temp = root.right; root.right = root.left; root.left = temp; invertTree(root.right); invertTree(root.left); return root; }
|
时间复杂度:O(n) 空间复杂度:O(h) h 是树高
思路二:广度优先遍历 广搜二叉树,并且遍历过程中交换树中所有节点的左子树和右子树 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public TreeNode invertTree(TreeNode root) { if (root == null) return root; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode poll = queue.poll(); TreeNode temp = poll.right; poll.right = poll.left; poll.left = temp; if (poll.left != null) queue.offer(poll.left); if (poll.right != null) queue.offer(poll.right); } return root; }
|
时间复杂度:O(n) 空间复杂度:O(w) 树的最大宽度 w
本人菜鸟,有错误请告知,感激不尽!
更多题解源码和学习笔记:github 、CSDN 、M1ng