//
// 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...