題目:輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)
這道題有點複雜,要用到兩個遞迴來判斷。首先因為約定的空樹不是任意乙個樹的子樹,所以先判斷一下兩個樹是不是為空,若空則返回false。
然後用另乙個遞迴函式判斷b是不是當前樹a的子結構。如果是,則返回true。如果不是,那麼再遞迴判斷b是不是樹a的左子樹的子樹,或者b是不是樹a的右子樹的子樹,只要有乙個滿足,那麼b都算是樹a的子樹。
在判斷子結構的遞迴函式裡,如果b的當前節點為空了,說明到達葉子節點,也就是整個樹都是子結構,所以返回true。否則,如果b的當前節點不空,但a的當前節點空了,說明匹配還沒完成就沒辦法繼續匹配了,那麼返回false。再接下來,對比兩個根節點的值是不是一樣,如果不一樣,肯定不是子結構,也直接返回false。如果值一樣,那麼遞迴遍歷兩棵樹的左子樹是不是子結構關係,並且兩棵樹的右子樹是不是子結構關係。
c++**如下:
1class
solution 910
bool ispart(treenode* p, treenode*q)
17 };
樹的子結構
題目 輸入兩顆二叉樹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...