由前序和中序重建二叉樹,並用後序驗證。
具體解釋見**注釋(個人感覺已經足夠詳細了)
#define _crt_secure_no_warnings
#include
#include
#include
#define n 100
//最大節點數
typedef
struct bitnode//typedef等於為結構重新命名
bitnode,
* bitree;
//後序遍歷
void
lastorder
(bitnode* root)
lastorder
(root-
>lchild)
;lastorder
(root-
>rchild)
;printf
("%c "
, root-
>data);}
bitnode*
createbitree
(char
* pre,
char
* mid,
int n)
node =
(bitnode*
)malloc
(sizeof
(bitnode));
//指向記憶體大小
if(node ==
null
)memset
(node,0,
sizeof
(bitnode));
//將node當前位置的後面與bitnode相同規格的個位元組賦0
//先序序列的第乙個元素必為根結點
node-
>data = pre[0]
;//根據根結點將中序序列分為左子樹和右子數
for(i =
0; i < n; i++
)else
if(mid[i]
!= pre[0]
)//n2初始為0,隨著判斷累加,最後記錄右邊節點的總數
}//根據樹的先序序列的長度等於中序序列的長度
//且先序遍歷是先左子樹再後子樹,無論先序還是中序 左子樹和右子樹的長度都是固定的
//從i=1開始 因為先序遍歷的第乙個是根
for(i =
1; i < n; i++
)else
}//遞迴
node-
>lchild =
createbitree
(lpre, lmid, n1)
; node-
>rchild =
createbitree
(rpre, rmid, n2)
;return node;
}int
main()
二叉樹 由前序遍歷和中序遍歷重建二叉樹
由前序遍歷和中序遍歷重建二叉樹 前序序列 1 2 3 4 5 6 中序序列 3 2 4 1 6 5 思路 前序遍歷第乙個是根節點。中序遍歷根節點左側為左子樹,根右側為右子樹。那麼先構造根節點,根節點左側都為左子樹,根右側都為右子樹。然後對左右子樹遞迴式的構造即可。封裝 binarytreenode ...
由前序遍歷和中序遍歷重建二叉樹
唯一的難點就是確定當前節點的左子樹的根節點和右子樹的根節點分別在前序遍歷陣列的位置。例如 先序遍歷陣列pre 1 2 3 4 5 6 7 中序遍歷陣列in 3 2 4 1 6 5 7 1是當前根節點,它在pre中的位置 pre start 0接著在in中找到1的位置,即分割點 j 3當前樹根所囊括的...
由前序遍歷和中序遍歷重建二叉樹
程式設計之美3.9 給出前序遍歷和中序遍歷,重新建立二叉樹,後序遍歷輸出。如下 view code 1 include 2 include 3 4using namespace std 56 struct node7 1213 void aftertra node proot 1419 aftert...