思路:
當兩個二叉樹都為null是,則為映象。
否則,當其中乙個為null時,返回false。
如果都不為null,並且節點的值不相等,則為false。
這時,遞迴的結束條件都已列舉完畢,接下來就是遞迴呼叫了。
遞迴root1的左子樹和root2的右子樹是否互為映象,並且遞迴root1的右子樹和root2的左子樹互為映象,如果兩個條件都成立,則他們互為映象。
/**
* 判斷兩個二叉樹是否互相映象
* @param root1
* @param root2
* @return
*/public boolean flipequiv(treenode root1, treenode root2) else if (root1 == null || root2 == null)
if (root1.val != root2.val)
return flipequiv(root1.left, root2.right) && flipequiv(root1.right, root2.left);
}
力扣951. 翻轉等價二叉樹
我們可以為二叉樹 t 定義乙個翻轉操作,如下所示:選擇任意節點,然後交換它的左子樹和右子樹。
只要經過一定次數的翻轉操作後,能使 x 等於 y,我們就稱二叉樹 x 翻轉等價於二叉樹 y。
編寫乙個判斷兩個二叉樹是否是翻轉等價的函式。這些樹由根節點 root1 和 root2 給出。
這個題目和」判斷兩個二叉樹是否互相映象」非常相似,但是它增加了子樹可以多次翻轉的條件,所以我們只需要修改最後的遍歷條件即可。
public boolean flipequiv(treenode root1, treenode root2) else if (root1 == null || root2 == null)
if (root1.val != root2.val)
return (flipequiv(root1.left, root2.right) && flipequiv(root1.right, root2.left))
|| (flipequiv(root1.left, root2.left) && flipequiv(root1.right, root2.right));
}
判斷兩個樹是否互相映象
3.判斷兩個樹是否互相映象 public static boolean ismirrorrec treenode r1,treenode r2 如果有一棵樹是空樹,另一顆不是,則返回false if r1 null r2 null 如果兩個樹都非空樹,則先比較根節點 if r1.val r2.val...
判斷兩個二叉樹是否相同
判斷兩個二叉樹是否相同 遞迴解法 public boolean issametreerec treenode p,treenode q if p null q null else else else 第一次寫了乙個是這樣的,自己覺得也可以,提交時不能ac,想了下根本是自己演算法立足點不對,分享下 對...
兩個二叉樹是否呈映象對稱
題目描述 給定兩個二叉樹,檢查它們是否呈映象對稱,即樹的結構成軸對稱,且對應節點的節點值相同。輸入格式 第一棵樹的輸入在第11行,表示二叉樹的前序遍歷序列。第二棵樹的輸入在第22行,表示二叉樹的前序遍歷序列。節點值的範圍為 0,100 0,100 區間內的整數,輸入中的 1 1表示空節點。輸出格式 ...