层序创建二叉树
創建過程:
(1) 輸入第一個數據:
?若為0,表示此樹為空,將空指針賦給根指針,樹構造完畢;
?若不為0,動態分配一個節點單元,并存入數據,同時將該節點地址放入隊列。
(2) 若節點不為空,從隊列中取出一個節點地址,并建立該節點的左右孩子:
?從輸入序列中讀入下一數據;
?若讀入的數據為0,將出隊節點的左孩子指針置空;否則,分配一個新的節點單元,存入所讀值,并將其置為出隊節點的左孩子,同時將此孩子地址入隊;
?接著再從輸入序列中讀入下一個數據;
?若讀入的數據為0,將出隊節點的右孩子指針置空;否則,分配一個新的節點單元,存入所讀值,并將其置為出隊節點的右孩子,同時將此孩子地址入隊;
(3) 重復第(2)步過程,直到隊列為空,再無節點出隊,構造過程到此結束。
typedef int ElementType; #define NoInfo 0 //用0表示沒有節點//層序創建二叉樹 BinTree CreateBinTree() {ElementType Data;BinTree BT, T;queue<TNode *> Q;//創建第1個節點,即根節點cin >> Data;if(Data != NoInfo){//分配節點單元,并將節點地址入隊BT = (BinTree)malloc(sizeof(struct TNode));BT->Data = Data;BT->Left = BT->Right = NULL;Q.push(BT);}elsereturn NULL; //若第一個數據就是0,返回空樹while(!Q.empty()){T = Q.front(); //從隊列中取出一節點地址 Q.pop();cin >> Data; //讀入T的左孩子if(Data == NoInfo)T->Left = NULL;else{//分配新節點,作為出隊節點的左孩子,并將該新節點入隊T->Left = (BinTree)malloc(sizeof(struct TNode));T->Left->Data = Data;T->Left->Left = T->Left->Right = NULL;Q.push(T->Left);}cin >> Data; //讀入T的右孩子if(Data == NoInfo)T->Right = NULL;else{//分配新節點,作為出隊節點的右孩子,并將該新節點入隊T->Right = (BinTree)malloc(sizeof(struct TNode));T->Right->Data = Data;T->Right->Left = T->Right->Right = NULL;Q.push(T->Right);}} //結束whilereturn BT; //返回二叉樹的根節點 }?
轉載于:https://www.cnblogs.com/FengZeng666/p/9729818.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: .net core 程序退出事件
- 下一篇: Linux段式管理与页式管理