樹的子結構 二叉樹的映象

2021-10-06 04:16:34 字數 1099 閱讀 6372

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

b是a的子結構, 即 a中有出現和b相同的結構和節點值。

例如:給定的樹 a:

3

/ \4 5

/ \1 2

給定的樹 b:

4 

/1

採用了兩次先序遍歷,深度優先搜尋。乙個先序遍歷用於當前樹、左子樹、右子樹是否包含b樹。

這裡乙個關鍵思路是,寫了乙個recur遞迴演算法,用來判斷兩棵樹是否相等。有了這樣乙個判斷函式,再使用先序遍歷,逐一判斷即可。

另外乙個關鍵是,返回條件。

對於issubstructure遞迴函式的返回條件:

對於recur遞迴函式,返回條件

class solution 

private boolean recur(treenode a, treenode b)

請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的映象一樣,那麼它是對稱的。

例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。

1

/ \2 2

/ \ / \

3 4 4 3

但是下面這個 [1,2,2,null,3,null,3] 則不是映象對稱的:

也就是說將原問題分解成子問題,在逐個判斷。

public boolean issymmetric(treenode root) 

private boolean recur(treenode aleft, treenode aright)

二叉樹的映象 對稱的二叉樹 樹的子結構

三道關於樹的題都可以用遞迴來做,看似很相近 有時候乙個遞迴不能解決問題,要用兩個。乙個滿足條件時繼續判斷,另乙個分支為不滿足條件時繼續,如 樹的子結構 struct treenode class solution bool solve treenode p1,treenode p2 return f...

二叉樹 樹的子結構

題目描述 給定兩棵二叉樹tree1與tree2,現在要求判斷tree2是否為tree1的乙個子樹.分析 可以使用遞迴的方法,找到與tree2根節點值相同的tree1的節點n,然後遞迴呼叫函式對以n為根節點的子樹進行判定。include include using namespace std defi...

二叉樹12 二叉樹的映象

題目 操作給定的二叉樹,將其變換為源二叉樹的映象。輸入描述 思路 首先要理解業務邏輯,何為映象?所謂映象就是對於任何乙個結點,將其左右子樹進行交換即可。對於一棵以root為根結點的二叉樹,要將其映象,首先將其左右子樹 root.left為根的子樹 和 root.right為根的子樹 進行映象,然後將...