二叉树算法的设计

二叉树算法的设计的总路线:明确一个节点要做的事情,然后剩下的事抛给框架。

void traverse(TreeNode root) {
    // root 需要做什么?在这做。
    // 其他的不用 root 操心,抛给框架
    traverse(root.left);
    traverse(root.right);
}

举两个简单的例子体会一下这个思路,热热身。

1. 如何把二叉树所有的节点中的值加一?

void plusOne(TreeNode root) {
    if (root == null) return;
    root.val += 1;

    plusOne(root.left);
    plusOne(root.right);
}

2. 如何判断两棵二叉树是否完全相同?

boolean isSameTree(TreeNode root1, TreeNode root2) {
    // 都为空的话,显然相同
    if (root1 == null && root2 == null) return true;
    // 一个为空,一个非空,显然不同
    if (root1 == null || root2 == null) return false;
    // 两个都非空,但 val 不一样也不行
    if (root1.val != root2.val) return false;

    // root1 和 root2 该比的都比完了
    return isSameTree(root1.left, root2.left)
        && isSameTree(root1.right, root2.right);
}

猜你喜欢

转载自www.cnblogs.com/aoeiuvAQU/p/11204865.html
今日推荐