摘要:原題檢查兩棵二叉樹是否在經過若干次扭轉后可以等價。扭轉的定義是,交換任意節點的左右子樹。等價的定義是,兩棵二叉樹必須為相同的結構,并且對應位置上的節點的值要相等。樣例是扭轉后可等價的二叉樹。
原題
檢查兩棵二叉樹是否在經過若干次扭轉后可以等價。扭轉的定義是,交換任意節點的左右子樹。等價的定義是,兩棵二叉樹必須為相同的結構,并且對應位置上的節點的值要相等。
注意:你可以假設二叉樹中不會有重復的節點值。
樣例
1 1
/ /
2 3 and 3 2
/
4 4
是扭轉后可等價的二叉樹。
1 1
/ /
2 3 and 3 2
/ /
4 4
就不是扭轉后可以等價的二叉樹。
解題思路
Recursion - 遞歸求解,分治的思路。
注意,題目中說的是經過若干次扭轉后可以等價,所以不要忘記考慮完全identical的情況,某一個節點的左右子樹翻轉一次對稱,反轉兩次還原。
文/Jason_Yuan(簡書作者)
原文鏈接:http://www.jianshu.com/p/0623...
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; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66439.html
problem Check if two binary trees are identical. Identical means the two binary trees have the same structure and every identical position has the same value. Example 1 1 / ...
摘要:遞歸法復雜度時間空間遞歸棧空間思路如果兩個根節點一個為空,一個不為空,或者兩個根節點值不同,說明出現了不一樣的地方,返回假。代碼遞歸法復雜度時間空間遞歸棧空間思路其實和寫法是一樣的,是比較兩個節點的兩個左邊,然后再比較兩個節點的兩個右邊。 Same Tree Given two binary trees, write a function to check if they are eq...
摘要:判斷兩棵樹是否是相同題目要求傳入兩棵樹的根節點,判斷這兩棵樹是否相同此題的核心就在于如何遍歷樹。定義樹的一種自然方式是遞歸的方式。一棵樹是一些節點的集合,這個集合可以是空集。這個遍歷算法可以用于場景如,計算一個節點的高度。 判斷兩棵樹是否是相同 題目要求:傳入兩棵樹的根節點,判斷這兩棵樹是否相同此題的核心就在于如何遍歷樹。一旦我們解決了這個問題,題目也就迎刃而解了。下面就來介紹一下 關...
閱讀 2511·2023-04-25 22:09
閱讀 1023·2021-11-17 17:01
閱讀 1556·2021-09-04 16:45
閱讀 2620·2021-08-03 14:02
閱讀 816·2019-08-29 17:11
閱讀 3254·2019-08-29 12:23
閱讀 1089·2019-08-29 11:10
閱讀 3281·2019-08-26 13:48