leetcode 劍指offer 7 重建二叉樹

2022-07-10 15:15:13 字數 1222 閱讀 2657

問題描述:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

解題思路:

前序遍歷性質:節點按照[ 根節點 | 左子樹 | 右子樹 ]排序。

中序遍歷性質:節點按照[ 左子樹 | 根節點 | 右子樹 ]排序。

根據以上性質,可得出以下推論:

前序遍歷的首元素 為 樹的根節點 node 的值。

在中序遍歷中搜尋根節點 node 的索引 ,可將 中序遍歷 劃分為 [ 左子樹 | 根節點 | 右子樹 ] 。

根據中序遍歷中的左 / 右子樹的節點數量,可將 前序遍歷 劃分為 [ 根節點 | 左子樹 | 右子樹 ]。

以上子樹的遞推性質是分治演算法的體現,考慮通過遞迴對所有子樹進行劃分。

分治演算法解析:遞推引數:根節點在前序遍歷的索引root、子樹在中序遍歷的左邊界left、子樹在中序遍歷的右邊界right

終止條件:left > right,代表已經越過葉節點,此時返回nullptr

遞推工作:

題解:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

return recur(0, 0, this->preorder.size() - 1);

}private:

vectorpreorder;

unordered_mapinorder;

treenode* recur(int root, int left, int right)

};

leetcode 劍指 Offer 專題(七)

劍指 offer 專題第七部。題目 劍指 offer 66.構建乘積陣列。定義 begin v 1 i prod a k a 0 times a 1 times dots times a i 1 quad v 1 0 1 v 2 i prod a k a i 1 times dots times a...

leetcode劍指offer 字串

二叉樹,鍊錶,字串 思路 進行兩次反轉 1.對整個句子反轉 2.對句子中的單詞反轉 經過三次反 1.反轉前面的字串。2.反轉後面的字串。3.反轉整個字串 不能直接用力扣46全排列的 力扣46是無重複的數字,這個題是有重複的。正確的解法 不用not in tmp來判斷這個字母是否需要遍歷,定義乙個us...

Leetcode劍指offer系列 平衡二叉樹

傳送門 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,nul...