Bottom-Up(Basic Depth First Search)
这里的算法思维就像,一个小人自己在里面游走,并不利用新的信使(开辟新的变量)去帮忙游走。既然是一个小人自己走,那么就需要维护一个变量,是一个全局的变量。
Maximum / Minimum Depth of Binary Tree
- 这题是基础中的基础,但也体现了基本功
- 不光是可以用到递归的方法,迭代也是可以实现
public int maxDepth(TreeNode root) {
if (root == null) return 0;
int[] ans = {Integer.MIN_VALUE};
helper(root, 1, ans);
return ans[0];
}
private void helper(TreeNode cur, int curLevel, int[] ans) {
if (cur.left == null && cur.right == null) {
ans[0] = Math.max(ans[0], curLevel); // ans[0] = Math.min(ans[0], curLevel);
return;
}
if (cur.left != null) {
helper(cur.left, curLevel + 1, ans);
}
if (cur.right != null) {
helper(cur.right, curLevel + 1, ans);
}
}
Invert Binary Tree
- 可以看出明显的DFS做法,找到应该停止的条件,是到叶子节点?还是更深的Null,这里是首先要考虑清楚的
- 这里是到叶子结点去处理。 代码有问题
public TreeNode invertTree(TreeNode root) {
if (root == null) return root;
helper(root, root.left, root.right);
return root;
}
private void helper(TreeNode root, TreeNode left, TreeNode right) {
if (root == null || (left == null && right == null)) {
return;
}
TreeNode temp = left;
left = right;
right = temp;
helper(left, left.left, left.right);
helper(right, right.left, right.left);
}