題目描述:
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)
解題思路:
(1)如果二叉樹a,b根節點相同,則只需要驗證二叉樹a,b的左右子樹都相同即可。否則,為false。ahasb函式就是來驗證這一性質的。
(2)如果二叉樹a,b的根節點不相同,則需要驗證a的左子樹與b相同,或者a的右子樹與b相同。如果滿足則成立,否則不成立。
樹的資料結構為
/**
public class treenode
}*/
public
class
solution
boolean result = false;
if(root1.val == root2.val)
if(!result)
return result;
}public
boolean
ahasb(treenode root1, treenode root2)
if(root1 == null)
if(root1.val == root2.val)
return
false;
}}
說明:當時很想把ahasb函式合併到hassubtree函式中,後來感覺這樣做是不行的。因為題目中說了,空子樹不是任一樹的子結構,那麼就意味著一開始如果root2為空,就應該返回false,但是在a,b的根節點相同時,如果遞迴想去當root2位空是應該返回true才對。因此與出現矛盾。所以我直接將這兩個函式分離開來了。
其實,如果在hassubtree函式中區分是根節點相同時候的遞迴的話,合併這兩個函式也是可以行的通的。
樹的子結構
題目 輸入兩顆二叉樹a和b 判斷b是不是a的子結構 二叉樹結點定義如下 首先 從樹根開始遍歷樹 如果結點與 b的根結點值相同 則繼續遍歷a的左子樹 以及b的左子樹 如果左子樹相同則遍歷a的右子樹以及b的左子樹 如果左右子樹都相同則 a包含b 如果結點與b的根節點值不同 則遍歷到a的左孩子 重複上述判...
樹的子結構
來自 劍指offer 的面試題18。題目 輸入兩棵二叉樹a和b,判斷b是不是a的子結構。二叉樹節點定義如下 public class treenode 思路分析 首先,在tree1中找到和tree2的根節點的值一樣的結點r 然後,再判斷tree1中以r為根結點的子樹是不是包含和tree2一樣的結構。...
樹的子結構
輸入兩顆二叉樹a,b,判斷b是不是a的子結構 思路 1 先判斷兩棵樹是否為空,是則沒有子樹 2 當兩棵樹為非空時,判斷當前的兩個根節點是否為子樹關係,若值相等,則繼續判斷左右子樹是否也對應相等 3 當根節點非子樹關係時,再判斷a樹的左右子樹和b樹是否有子樹。public class treenode...