/**
* definition for binary tree
* struct treenode
* };
*/class solution
treenode* construct(vector& pre, vector& vin, int l1, int r1, int l2, int r2)
int val = pre[l1];
int index;
for(index = l2; index <= r2; index ++)
int left_tree_len = index - l2;
int right_tree_len = r2 - index;
if(left_tree_len > 0)
root->left = construct(pre, vin, l1+1, l1+left_tree_len, l2, index-1);
if(right_tree_len >0 )
root->right = construct(pre, vin, l1+1+left_tree_len, r1, index+1, r2);
return root;
}};
在這裡需要注意的是:給定二叉樹的前序遍歷(或者後序遍歷)和中序遍歷可以重建二叉樹,而對於後序遍歷和前序遍歷則不能確定二叉樹。(得到二叉樹就可以得到相應的後序遍歷序列了,**如下)
vectorpostorder;
void visit(treenode *t)
void postorder(treenode* r)
}void getpost(vectorpre,vectorvin)
return ;
}
由中序遍歷序列和前序遍歷序列重建二叉樹
在二叉樹中,中序遍歷是一種很常見的遍歷方式,首先遍歷左子樹,然後根節點,最後右子樹。前序遍歷是先遍歷根節點,然後左子樹,最後右子樹。我們知道,前序遍歷的第乙個數字就是根節點,由根節點的值我們在中序遍歷的序列中可以根據根節點的值區分出左子樹還有右子樹,以及每個子樹的結點的數目,然後我們由此在前序遍歷的...
根據前序遍歷序列和中序遍歷序列重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。程式設計思路 1.先求出根節點 前序序列第乙個元素 2.將根節點帶入到中序遍歷序列中求出左右子樹的中序遍歷序列。3.通過左...
由中序和後序重建二叉樹
time limit 1000ms memory limit 65536k 有疑問?點這裡 已知一顆二叉樹的中序遍歷序列和後序遍歷序列,求二叉樹的深度。輸入資料有多組,輸入t,代表有t組資料。每組資料報含兩個長度小於50的字串。第乙個字串表示二叉樹的中序遍歷,第二個表示二叉樹的後序遍歷。輸出二叉樹的...