已知中序遍歷和先序遍歷重建二叉樹

2021-07-28 13:40:24 字數 2269 閱讀 8751

//

// main.cpp

// constructbinarytree

//// created by bazinga on 2017/3/12.

//// 根據前序遍歷和中序遍歷求二叉樹的結構

// 已知前序遍歷的第乙個值為根節點 而根節點在中序遍歷中的位置就能確定他的左右子樹。然後對區分開的左右子樹進行遞迴。

#include

#include

#include

using

namespace

std;

struct binarytreenode;

binarytreenode * contructtree(int * preorder , int * inorder , int length);

binarytreenode * contructtreecore(int * startpreorder , int * endpreorder,int * startinorder ,int *endinorder);

binarytreenode * contructtree(int * preorder , int * inorder , int length)

return contructtreecore(preorder, preorder + length - 1, inorder,inorder + length -1);

}binarytreenode* contructtreecore(int * startpreorder , int * endpreorder,int * startinorder ,int *endinorder)

//在中序遍歷中找到根節點的值

int * rootinorder = startinorder;

while (rootinorder <= endinorder && *rootinorder != rootvaule )

if(rootinorder > endinorder)

throw

string("輸入有誤");

//int leftlength = rootinorder - startinorder;

// cout<<"左子樹的長度"if (leftlength > 0)

if (leftlength < endpreorder - startpreorder)

return root;

}void printtreenode(binarytreenode* pnode)

else

printf("\n");

}void printtree(binarytreenode* proot)

}void destroytree(binarytreenode* proot)

}int main(int argc, const

char * argv) ;

int inorder[length] = ;

const

int length2 = 5;

int preorder2[length2] = ;

int inorder2[length2] = ;

const

int length3 = 5;

int preorder3[length3] = ;

int inorder3[length3] = ;

const

int length4 = 1;

int preorder4[length4] = ;

int inorder4[length4] = ;

const

int length5 = 7;

int preorder5[length5] = ;

int inorder5[length5] = ;

const

int length7 = 7;

int preorder7[length7] = ;

int inorder7[length7] = ;

const

int length8 = 2;

int preorder8[length8] = ;

int inorder8[length8] = ;

binarytreenode * root = contructtree(preorder4, inorder4, length4);

printtree(root);

destroytree(root);

return

0;}

二叉樹已知先序遍歷和中序遍歷得到後序遍歷

已經乙個二叉樹先序遍歷acdefhgb,中序遍歷decahfbg,求後序遍歷?先序遍歷 1 訪問根節點 2 先序遍歷左子樹 3 先序遍歷右子樹 中序遍歷 1 中序遍歷左子樹 2 訪問根節點 3 中序遍歷右子樹 後序遍歷 1 後序遍歷左子樹 2 後序遍歷右子樹 3 訪問根節點 解題思路 首先看先序遍歷...

已知二叉樹先序遍歷中序遍歷求後序遍歷

思路簡介 先序遍歷中第乙個字母即為根節點,在中序遍歷中找到根節點的位置 把中序遍歷的字串序列從根節點分成兩部分,左側一部分構建左子樹,右側一部分構建右子樹 在 的基礎上在先序遍歷中也找到構建左右子樹的部分 遞迴還原二叉樹 後序遍歷輸出即可 include include using namespac...

二叉樹 已知先序遍歷 中序遍歷,求後序遍歷

步驟 1.確定樹的根結點 樹根是在先序遍歷中最先出現的元素,即先序遍歷的第乙個結點是二叉樹的根。2.求解樹的子樹 找到根在中序遍歷的位置,位置左邊是二叉樹的左孩子,右邊是右孩子,若根結點的左邊或右邊為空,則該方向子樹為空 若左右子樹都為空,則該結點是葉子節點。3.對二叉樹的左右孩子分別進行步驟1,2...