二叉樹的子結構

2021-09-26 04:36:50 字數 1221 閱讀 6592

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

第一種方法是使用遞迴的思想, 第一步通過遞迴找到 跟子樹根節點相同的 結點,找到後 呼叫 函式chen,再依次遞迴比較每乙個 結點 是否相等。  這種遞迴的時間複雜度  太高了 ,在牛客上執行不過去。

class solution 

bool flag = false;

if (proot1->val == proot2->val)

flag = chen(proot1, proot2);

if (flag)

return true;

flag = hassubtree(proot1->left, proot2);

if (!flag)

return flag;

}bool chen(treenode* proot1, treenode* proot2)

bool flag = true;

if (proot1->val != proot2->val)

flag = chen(proot1->left, proot2->left);

if (flag)

flag = chen(proot1->right, proot2->right);

return flag;

}};

第二種方法, 就是借用層次遍歷,使用佇列,按照層次遍歷的順序 首先找到跟 子樹根節點相同的結點,然後 使用函式chen也用層次遍歷  一層層 判斷 每個結點是否一樣。

class solution 

queueq1;

q1.push(proot1);

bool flag=false;

while(!q1.empty() )

if(proot1->left!=null)

q1.push(proot1->left);

if(proot1->right!=null)

q1.push(proot1->right);

}return false;

} bool chen(treenode* proot1, treenode* proot2)

if(proot2->right!=null)

}if(q2.empty())

return true;

return false;

}};

二叉樹的子結構

include include stack include queue using namespace std 二叉樹結點 typedef struct bitnodebitnode,bitree 按先序序列建立二叉樹 int createbitree bitree t else return0 輸...

二叉樹 樹的子結構

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

二叉樹的子結構 深度以及重建二叉樹

二叉樹相關的套路,除了四種遍歷方式,還有很多的內容,有二叉樹的深度,將乙個陣列構建成為乙個二叉樹。今天接著搞定二叉樹。劍指offer第55 i題,leetcode第104題 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度...