思路:
①先按照層次遍歷的思想初始化樹,其中保留初始化陣列邊界內的空結點,權值為0,結果為完全二叉樹。
②建完樹之後,通過遞迴遍歷,剪取權值為0的枝,使之成為普通二叉樹。
其中,初始化的陣列中,必須包含空結點,值為0。
**:先建btree.h標頭檔案
#pragma once
#define elemtype int
typedef struct node
*btree,node;
void
inittree
(btree head
,elemtype
*a,int length)
;//初始化樹,length為陣列長度
void
preorder
(btree tree)
;//先序
void
inorder
(btree tree)
;//中序
void
levelorder
(btree tree)
;//層次
void
postorder
(btree tree)
;//後續
void
delectnull
(btree tree)
;//剪枝
再建compute.cpp檔案
#include "btree.h"
#include
#include
#include
using namespace std;
void
inittree
(btree head
,elemtype
* a, int length)
else
//左子樹越界
if(i *2+
2< length)
//右子樹未越界
else
//右子樹越界q.
pop();
}delectnull
(head);
//剪枝
}void
preorder
(btree tree)
void
inorder
(btree tree)
void
postorder
(btree tree)
void
delectnull
(btree tree)
void
levelorder
(btree tree)
}
測試:
#include"btree.h"
#include
using namespace std;
int main()
;//初始化陣列
btree head=
newnode
;inittree
( head,a,7)
; cout <<
"層次遍歷:"
<< endl;
levelorder
(head)
; cout <<
"先序遍歷:"
<< endl;
preorder
(head)
; cout <<
"中序遍歷:"
<< endl;
inorder
(head)
; cout <<
"後續遍歷:"
二叉樹的建立,前序,中序,後序,層序遍歷
二叉樹 binary tree 是另一種樹形結構,它的特點是每個節點至多有兩顆子樹,並且其子樹有左右之分,並且順序不能顛倒。主要用遞迴的思想完成建立,遍歷等操作。binarytree const t arr,const t invalied 傳入乙個順序為前序的陣列,invalied意味節點為nul...
二叉樹的遞迴遍歷 (前序,中序,後序,層序)
首先我們來講前序遍歷。前序遍歷很簡單,首先判斷根樹是否為空 注意前序遍歷的次序是 根 左子樹 右子樹 如此遞迴呼叫。以下為 templatevoid bitree preorder binode bt 中序遍歷是實際問題中經常使用的一種遍歷。其 形式與前序遍歷很相似,其遍歷順序為 左子樹 根 右子樹...
前序中序和中序後序還原二叉樹
前序中序還原二叉樹 struct node creat int len,char str1,char str2 由先序序列和中序序列建立二叉樹 root lchild creat i,str1 1,str2 建立左子樹 root rchild creat len i 1,str1 i 1,str2 ...