劍指Offer 二叉樹 (2)

2021-09-02 16:25:42 字數 964 閱讀 1303

知識點/資料結構:二叉樹

題目描述:

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)

思路:

第一步:在樹a中找到和樹b的根節點一樣的值一樣的節點r;

實際上就是樹的遍歷,可以用遞迴的方法去遍歷,也可以用迴圈的方法去遍歷;

第二步:判斷樹a中以r為根節點的子樹是不是包含和樹b一樣的結構;

也可以用遞迴的思路來看考慮:如果節點r的值和樹b的根節點不相同,停止;如果他們的值相同,則遞迴判斷他們各自的左右節點的值是不是相同。

遞迴終止條件:我們達到了樹a或者樹b的葉節點。

/**public class treenode }*/

//方法是普通解法,為二叉樹遍歷+匹配問題。

public class solution

//執行下面的**代表第乙個根節點不一樣,開始比較左子樹,和右子樹。

//如果result沒有改變,說明沿著主樹找不到,才開始找左右子樹

if(!result)

//左右子樹是並列的,而不是相容的,就是兩個之中有乙個就好

if(!result)

}

return result;

}public boolean doestree1hastree2(treenode root1,treenode root2){

if(root1==null&&root2!=null){

return false;

//下面的else if沒搞懂,因為題目說:我們約定空樹不是任意乙個樹的子結構

//搞懂了:因為上面開始判斷的時候是樹a和樹b都不為空的時候,這個判斷是在判斷過程中。

//表示的意思就是左邊的樹包括了右邊,類似集合b屬於a注意點:在第一層迴圈中,遞迴呼叫的自己,而在下面的函式定義中,也是呼叫的自己本身

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

劍指offer 平衡二叉樹

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹 1 重複遍歷結點 參考上一題求二叉樹的深度,先求出根結點的左右子樹的深度,然後判斷它們的深度相差不超過1,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子樹是否...

劍指offer 重建二叉樹

重建二叉樹2.cpp 定義控制台應用程式的入口點。題目描述 輸入乙個二叉樹的前序遍歷和中序遍歷,輸出這顆二叉樹 思路 前序遍歷的第乙個節點一定是這個二叉樹的根節點,這個節點將二叉樹分為左右子樹兩個部分,然後進行遞迴求解 include stdafx.h include vector using na...