tweaked identical binary tree

原題
檢查兩棵二叉樹是否在通過若干次扭轉後能夠等價。扭轉的定義是,交換任意節點的左右子樹。等價的定義是,兩棵二叉樹必須爲相同的結構,而且對應位置上的節點的值要相等。
注意:你能夠假設二叉樹中不會有重複的節點值。
樣例ide

1             1

/ / \
2 3 and 3 2
/ \
4 4
是扭轉後可等價的二叉樹。code

1             1

/ / \
2 3 and 3 2
/ /
4 4
就不是扭轉後能夠等價的二叉樹。遞歸

解題思路
Recursion - 遞歸求解,分治的思路。
注意,題目中說的是通過若干次扭轉後能夠等價,因此不要忘記考慮徹底identical的狀況,某一個節點的左右子樹翻轉一次對稱,反轉兩次還原。get

文/Jason_Yuan(簡書做者)
原文連接:http://www.jianshu.com/p/0623...io

public boolean isTweakedIdentical(TreeNode a, TreeNode b) {
        if (a == null && b == null) {
            return true;
        }
        if (a == null || b == null) {
            return false;
        }
        if (a.val != b.val){
            return false;
        }
        //divide
        // boolean left = isTweakedIdentical(a.left, b.right);
        // boolean right = isTweakedIdentical(a.right, b.left);
        //注意,題目中說的是通過若干次扭轉後能夠等價,因此不要忘記考慮徹底identical的狀況,某一個節點的左右子樹翻轉一次對稱,反轉兩次還原。
        boolean left = isTweakedIdentical(a.left, b.left) || isTweakedIdentical(a.left, b.right);
        boolean  right = isTweakedIdentical(a.right, b.right) || isTweakedIdentical(a.right, b.left);
        
        //conquer
        // if (left != true || right != true){
        //     return false;
        // }
        // else{
        //     return true;
        // }
        
        return left && right;
    }
相關文章
相關標籤/搜索