Bottom-Up(Basic Depth First Search)

这里的算法思维就像,一个小人自己在里面游走,并不利用新的信使(开辟新的变量)去帮忙游走。既然是一个小人自己走,那么就需要维护一个变量,是一个全局的变量。


Maximum / Minimum Depth of Binary Tree

  1. 这题是基础中的基础,但也体现了基本功
  2. 不光是可以用到递归的方法,迭代也是可以实现
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

  1. 可以看出明显的DFS做法,找到应该停止的条件,是到叶子节点?还是更深的Null,这里是首先要考虑清楚的
  2. 这里是到叶子结点去处理。 代码有问题
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);
 }

results matching ""

    No results matching ""