劍指Offer第18題(樹的子結構)

2021-10-01 02:47:25 字數 1316 閱讀 3724

(本部落格旨在個人總結回顧)

題目描述:

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。二叉樹結點的定義如下:

struct binarytreenode

;

解題思路:理解題目要求:b結構中結點所存的值與a子結構所存值相同即b為a的子結構。

要判斷b結構是否為a的子結構就需要遍歷a的子結構,可使用遞迴來解決該問題。

完整**:

#include "stdafx.h"

#include using namespace std;

struct binarytreenode;/*

* @name istreeahastreeb

* @brief 遞迴遍歷b結點與a結點值是否相同

* @param [in] binarytreenode * ptreea

* @param [in] binarytreenode * ptreeb

* @return bool

*/bool istreeahastreeb(binarytreenode* ptreea, binarytreenode* ptreeb)

if (null == ptreea)

if (ptreea->m_nvalue != ptreeb->m_nvalue)

return istreeahastreeb(ptreea->m_pleft, ptreeb->m_pleft) && istreeahastreeb(ptreea->m_pright, ptreeb->m_pright);}/*

* @name hassubtree

* @brief 遞迴遍歷與b跟結點相同的a結點

* @param [in] binarytreenode * ptreea

* @param [in] binarytreenode * ptreeb

* @return bool

*/bool hassubtree(binarytreenode* ptreea, binarytreenode* ptreeb)

if (!bresult)

if (!bresult)

}return bresult;

}int _tmain(int argc, _tchar* ar**)

執行結果:

20180703劍指offer題18 樹的子結構

判斷一棵樹tree2是不是另一棵樹tree1的子結構,空樹不是任意乙個樹的子結構。需要進行的判斷 1.都不是none,判斷val,再進一步判斷 左右進一步看val,或者左右重新判斷 2.tree1是空而tree2非空 return false 3.tree2已是空,return true 4.一開始...

劍指offer 第26題 樹的子結構

輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 12給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。示例 1 輸入 a 1 2,3 b 3 1 ...

劍指offer 18 樹的子結構

題目描述 輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 思路 用遞迴,遍歷a樹的每乙個節點,然後對於每乙個節點,再判斷是否和a相匹配。coding utf 8 class treenode def init self,x self.val x self.le...