假設前序 char pstr = "abdcef" 中序為 char mstr = "dbaecf" 構造該二叉樹
遞迴思想,首先前序遍歷的第乙個一定是根結點,然後從中序遍歷中找到根節點所在的位置,這樣
就將中序分為左右子樹的兩部分,比如,首先找到先序的第乙個'a', 在中序遍歷中的位置,那麼
'db' 'ecf' 就分別為'a' 的左子樹和右子樹, 然後繼續遞迴求解即可;
void rebuild(char* ps,char* ms,int len,node* &temp)temp = new node; //
若不為空,則建立乙個新節點 讀取前序遍歷的第乙個
temp->val = *ps;
temp->lchild =null;
temp->rchild =null;
if (len == 1) //
若該節點為樹的最後乙個 返回
int left_len = 0,right_len = 0
;
char* p_head =ms;
while ((*p_head) != *ps) //
求根節點在中序遍歷中的位置
right_len = len - 1 -left_len;
if (left_len > 0) //
分別構造左子樹和右子樹
rebuild(ps+1,ms,left_len,temp->lchild);
if (right_len > 0
) rebuild(ps + left_len + 1,p_head + 1,right_len,temp->rchild);
}
根據前序遍歷和中序遍歷樹構造二叉樹
根據前序遍歷和中序遍歷樹構造二叉樹.樣例給出中序遍歷 1,2,3 和前序遍歷 2,1,3 返回如下的樹 2 1 3 假設樹中不存在相同數值的節點 definition of treenode class treenode class solution treenode helper vector p...
根據二叉樹的前序遍歷和中序遍歷構造二叉樹
題 給出某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列pre 和中序遍歷序列in 則重建二叉樹並返回。思路 令pi pre 0 由二叉樹的前序遍歷特性可知pi為二叉樹的根節點root,遍歷in,得到in j pi的下標...
根據前序和中序重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。include include include include define n 100 using namespace std s...