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

2021-08-22 11:38:55 字數 663 閱讀 1541

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

思路:1.前序遍歷的第乙個節點一定是根結點。前序遍歷的乙個節點要麼是相鄰前乙個節點的左子樹、右子樹或者更靠近前面節點的右子樹。如何確定前後相鄰兩個節點的關係需要中序遍歷提供資訊。

2.對於前序的乙個節點,中序遍歷對應的節點把節點分為左右兩個部分,左邊是左子樹擴充套件出來的分支,右邊是右子樹擴充套件出來的分支。

3.如果左邊節點被訪問過,那麼該節點左子樹一定為空;相應的右邊節點被訪問過,那麼該節點右子樹為空。(判斷的時候只需要判斷相鄰的左右節點,因為我們是以前序遍歷的方式往下遞迴,父節點一定在左右子樹訪問前)

class solution 

}vis[j]=1;

if(j>l&&vis[j-1]==0)

if(jright=creat(pre,vin,j+1,r,vis);

}return rt;

}treenode* reconstructbinarytree(vectorpre,vectorvin)

if(j+1right=creat(pre,vin,j+1,len-1,vis);

}return root;

}};

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

問題 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。分析 1 先根據前序遍歷的第乙個節點root找到分界點i 2 將前序遍歷陣列和中序遍歷陣列按照分界點進行劃分 3 遞迴 實現 public treenode buildtree int...

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

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。前序遍歷 根左右 中序遍歷 左根右 根據前序遍歷我們可以知道根節點,根據中序遍歷我們可以知道根節點的左右子樹結點有哪些。如 前序 中...

重建二叉樹(根據二叉樹的前序和中序遍歷還原二叉樹)

思路 根據前序遍歷,我們可以知道二叉樹的根節點,根據這個跟節點我們可以在中序遍歷中找到該節點的位置k,小於k的節點均為該節點的左子樹,大於k的節點均為該節點的右子樹。這樣的話,我們就很容易想到遞迴的方式。每次遞迴都返回該子樹的根節點。public class solution public tree...