LeetCode每日一題:951、翻轉二叉樹
阿新 • • 發佈:2020-07-09
題目描述:
我們可以為二叉樹T定義一個翻轉操作,如下所示:選擇任意節點,然後交換它的左子樹和右子樹。
只要經過一定次數的翻轉操作後,能使X等於Y,我們就稱二叉樹X翻轉等價於二叉樹Y。
編寫一個判斷兩個二叉樹是否是等價的函式。這些書由根節點root1和root2給出。
解題原理:這題跟映象二叉樹判斷有些相似。
如果兩棵樹互為映象二叉樹,那麼滿足條件
1、根節點的值相同
2、每棵樹的左子樹都與另一棵樹的右子樹互為映象對稱。
3、每棵樹的右子樹都與另一棵樹的左子樹互為映象對稱。
因為這道題加了翻轉操作,所以滿足上述條件的兩個映象二叉樹一定符合題意。
那麼本身不用翻轉操作就相等的二叉樹自然符合題意。
所以遞迴返回的應該是映象二叉樹 || 本身就相等的二叉樹。
public boolean flipEquiv(TreeNode root1, TreeNode root2) {
// 包含二者都為null
if(root1==root2){
return true;
}
if(root1==null || root2==null || root1.val!=root2.val ){
return false;
}
return (flipEquiv(root1.left,root2.right) && flipEquiv(root1.right,root2.left) ||
flipEquiv(root1.left,root2.left) && flipEquiv(root1.right,root2.right) );
}