Bottom-Up

  • 有些题目是必须自底向上才能做出来的,比如balances binary tree

  • 一般这种题目都是helper method在recursive call的同时也返回了其它更有用的信息

  • 本质上是建立了一个Tuple

  • 不会Bottom-Up很多时候就是因为不会postOrder Traversal

  • count univalue subtrees

  • largest BST Subtree

  • 建立一个global variable,在判断isUnival的同时计算cnt

  • 核心是postOrder Traversal的思想

public class Solution {
    int cnt;
    public int countUnivalSubtrees(TreeNode root) {
        cnt = 0;
        isUnival(root);
        return cnt;
    }
    private boolean isUnival(TreeNode root){
        if(root == null) return true;
        boolean left = isUnival(root.left);
        boolean right =isUnival(root.right);
        if(left && right){
            if(root.left != null && root.left.val != root.val){
                return false;
            }
            if(root.right != null && root.right.val != root.val){
                return false;
            }
            cnt++;
            return true;
        }
        return false;
    }
}

  • 建tuple!建tuple!建tuple!

  • tuple里不需要记录val,也不需要left,right

  • 一言不合就建tuple咯

Last updated

Was this helpful?