問題:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
解題思路:
(1)輸入前序遍歷陣列和中序遍歷陣列,返回樹節點;
(2)判斷前序遍歷陣列和中序遍歷陣列的內容和長度是否為空;
(3)新建乙個樹,起始節點為前序遍歷的第乙個節點;
(4)遍歷中序遍歷,如果中序遍歷中的點等於前序遍歷中選定的點:
左節點=遞迴(前序遍歷(0,i),中序遍歷(0,i)
右節點=遞迴(前序遍歷(i+1, 前序末尾),中序遍歷(i+1,中序末尾));
(5)返回樹;
public static class treenode
}public treenode reconstructbinarytree(int pre,int in)
if (pre.length == 0 || in.length == 0)
if (pre.length != in.length)
treenode root = new treenode(pre[0]);
for (int i = 0; i < pre.length; i++)
}return root;
}
4 重建二叉樹(劍指offer)
4.重建二叉樹 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。1 思路 通常樹有如下幾種遍歷方式 前序遍歷 先訪問根結點,再訪問左子結點,最後訪問右子結點。root一般在最前 中...
劍指offer 樹 7 重建二叉樹
使用雜湊表map記錄中序遍歷每個元素的位置 利用性質 1.先序遍歷的第乙個節點是根節點 2.中序遍歷的根節點的左邊是左子樹,右邊是右子樹 假設左子樹的中序遍歷的長度是len,在前序遍歷中,根節點後面len個數,是左子樹的前序遍歷,剩下的數是右子樹的前序遍歷 根據左右子樹的前序遍歷和中序遍歷,我們先遞...
劍指offer4 重建二叉樹
給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...