根據前序和中序重建二叉樹

2021-08-24 20:13:23 字數 1209 閱讀 5540

解題思路:

根據前序遍歷的特點「根,左,右」,得出前序遍歷的第乙個節點就是整棵樹的根

根據中序遍歷的特點「左,根,右」,找到中序遍歷中和根節點相同的節點,也就是根節點的位置

在中序中,根節點左邊的為整棵樹的左子樹,根節點後邊的為整棵樹的右子樹,同時也就確定了左右子樹的數量

在前序遍歷和中序遍歷中劃分了左右子樹節點的值之後,再用遞迴的方法分別構建左右子樹

例如:

c**如下:

typedef struct treenode

treenode;

treenode * createnode(char data)

treenode *createtreebypreandin(

char preorder,int preordersize,

char inorder,int inordersize)

//根節點的值

char root = preorder[0];

//在中序中找根節點的位置

int i;

for (i = 0; i < inordersize; i++) }

//如果找不到,代表這棵樹不存在

if (i == inordersize)

找到後構建整棵樹的根節點

//treenode *proot = (treenode*)malloc(sizeof(treenode));

//assert(proot);

//proot->data = root;

//proot->pleft = proot->pright = null;

treenode *proot = createnode(root);

//遞迴的構建左右子樹

proot->pleft = createtreebypreandin(

preorder + 1, i,

inorder, i);

proot->pright = createtreebypreandin(

preorder + 1 + i, preordersize - 1 - i,

inorder + 1 + i, inordersize - 1 - i);

return proot;

}

根據前序和中序重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。include include include include define n 100 using namespace std s...

根據前序和中序,重建二叉樹

具體的思路就是遞迴,遍歷中序陣列,在前序中找相同的。因為前序是 根左右 而中序是 左根右 所以中序中匹配的前序數字的前面所有數字都是該樹的左節點,而後面的數字就是該樹的右節點 這裡是主要的邏輯 node node newnode preorder prestart for int i instart...

根據前序和中序遍歷重建二叉樹

include stdafx.h include include include using namespace std 重建二叉樹 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹.假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字.例如 輸入前序遍歷序列和中序遍歷序列,則重建出圖...