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