根據前序和中序 構造二叉樹

2022-07-22 14:09:12 字數 903 閱讀 6275

假設前序  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...