二叉樹構造演算法

2021-10-05 18:41:34 字數 975 閱讀 1268

先序遍歷+中序遍歷->二叉樹 & 中序遍歷+後續遍歷->二叉樹

由先序遍歷和中序遍歷可以唯一的確定一顆二叉樹,使用遞迴的方法建立。

由後續遍歷和中序遍歷可以唯一的確定一顆二叉樹,使用遞迴的方法建立。

但是:先序遍歷和後續遍歷不能唯一的建立一顆二叉樹。

#include "btree.cpp"

/*pre存放先序序列,in存放中序序列,n為二叉樹結點個數,

本演算法執行後返回構造的二叉鏈的根結點指標*/

btnode *createbt1(char *pre,char *in,int n)

s=(btnode *)malloc(sizeof(btnode)); //建立二叉樹結點*s

s->data=*pre;

//在中序序列中找等於*ppos的位置k

for (p=in;plchild=createbt1(pre+1,in,k); //遞迴構造左子樹

s->rchild=createbt1(pre+k+1,p+1,n-k-1); //遞迴構造右子樹

return s;

}/*post存放後序序列,in存放中序序列,n為二叉樹結點個數,

本演算法執行後返回構造的二叉鏈的根結點指標*/

btnode *createbt2(char *post,char *in,int n)

r=*(post+n-1); //根結點值

s=(btnode *)malloc(sizeof(btnode)); //建立二叉樹結點*s

s->data=r;

//在in中查詢根結點

for (p=in;plchild=createbt2(post,in,k); //遞迴構造左子樹

s->rchild=createbt2(post+k,p+1,n-k-1); //遞迴構造右子樹

return s;

}int main()

二叉樹構造

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。public int findvalptr vectorarr,int val return i 查詢子樹的根節點 publi...

構造二叉樹

題目 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 理解從前序中可以直接找到根節點,然後從中序中找到這個根節點並...

構造二叉樹

例 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 二叉樹 3 9 20 15 7 definition for a binary tree node.struct treenode class solution treenode buildtr...