輸入兩棵二叉樹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題 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度...