二叉樹的子結構

2021-08-02 20:19:32 字數 1313 閱讀 1506

#include

#include

<

stack

>

#include

<

queue

>

using namespace std;

//二叉樹結點

typedef struct bitnodebitnode,*bitree;

//按先序序列建立二叉樹

int createbitree(bitree &t)

else

return0;}

//輸出

void visit(bitree t)

}//先序遍歷

void preorder(bitree t)

}//中序遍歷

void inorder(bitree t)

} //後序遍歷

void postorder(bitree t)

}/* 先序遍歷(非遞迴)

思路:訪問t->j

bitree p = t;

//棧不空或者p不空時迴圈

while(p || !stack.empty())

else

}//while

}/* 中序遍歷(非遞迴)

思路:t是要遍歷樹的根指標,中序遍歷要求在遍歷完左子樹後,訪問根,再遍歷右子樹。

先將t入棧,遍歷左子樹;遍歷完左子樹返回時,棧頂元素應為t,出棧,訪問t->data,再中序遍歷t的右子樹。

*/void inorder2(bitree t)

else

}//while

}//後序遍歷(非遞迴)

typedef struct bitnodepostbitnodepost,*bitreepost;

void postorder2(bitree t)

//左右子樹訪問完畢訪問根節點

while(!

stack

.empty() && (stack

.top())->

tag==

'r')

//遍歷右子樹

if(!

stack

.empty())

}//while

}//層次遍歷

void levelorder(bitree t)

//右子樹不空,將右子樹入隊

if(p->rchild !=

null)

}}bool issubtree(bitnode* root1,bitnode*root2)

int main()

二叉樹的子結構

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 第一種方法是使用遞迴的思想,第一步通過遞迴找到 跟子樹根節點相同的 結點,找到後 呼叫 函式chen,再依次遞迴比較每乙個 結點 是否相等。這種遞迴的時間複雜度 太高了 在牛客上執行不過去。class solut...

二叉樹 樹的子結構

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

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

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