(本部落格旨在個人總結回顧)
題目描述:
輸入兩棵二叉樹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...