劍指 由前序遍歷和中序遍歷重建二叉樹

2021-08-04 12:58:54 字數 795 閱讀 3227

題目:由前序遍歷和中序遍歷重建二叉樹(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5) 

思想:

**如下:

node* rebuild(t prev, t in,int l, int r)  //l為陣列的開始開始位置的下標,r為陣列最尾部數字的下標

int n = 0;

_rebuild(_root,prev, in, l, r,n);//遞迴重建二叉樹

return _root;

}private:

void _rebuild(node*& root, t prev, t in, int l, int r, int& n)

else

int begin = l;

for (int i = l; i <= r; i++)

}_rebuild(root->_left, prev, in, begin, l-1,n);

_rebuild(root->_right, prev, in, l+1, r,n);

}

root傳引用的原因:因為在遞迴的下一層new的新結點要連線到上一層結點的左孩子上或者右孩子上,則下一層的root等於上一層的root->_left / root->_right

n傳引用的原因:因為n的變化影響整體,先序陣列arr1只有被new之後才可以向後移動,否則n不變。

劍指offer 由前序中序遍歷重建二叉樹

前序遍歷和中序遍歷得出二叉樹,然後計算葉子節點的數目 public class frontmid return tree pre,0,pre.length 1,mid,0,mid.length 1 public static treenode tree int pre,int ps,int pe,i...

由前序遍歷和中序遍歷重建二叉樹

唯一的難點就是確定當前節點的左子樹的根節點和右子樹的根節點分別在前序遍歷陣列的位置。例如 先序遍歷陣列pre 1 2 3 4 5 6 7 中序遍歷陣列in 3 2 4 1 6 5 7 1是當前根節點,它在pre中的位置 pre start 0接著在in中找到1的位置,即分割點 j 3當前樹根所囊括的...

由前序遍歷和中序遍歷重建二叉樹

程式設計之美3.9 給出前序遍歷和中序遍歷,重新建立二叉樹,後序遍歷輸出。如下 view code 1 include 2 include 3 4using namespace std 56 struct node7 1213 void aftertra node proot 1419 aftert...