力扣654題 105題 106題(二叉樹 遞迴)

2022-06-17 08:00:14 字數 2715 閱讀 2399

構造二叉樹,根節點要做的就是想辦法把自己構造出來,

先找到陣列中的最大值,然後再用遞迴呼叫左右陣列構造左右子樹

前序遍歷

1.使用max函式找到陣列中的最大值和對應的索引

max_val = max(nums)

max_idx = nums.index(max_val)

2.最大值為二叉樹根節點

root = treenode(nums[max_idx])

3.遞迴呼叫構造左右子樹

最大值所在位置

int maxval = nums[maxindex];//

最大值for (int i = leftindex + 1; i < rightindex; i++)

}treenode root = new

treenode(maxval);

//根據maxindex劃分左右子樹

root.left =constructmaximumbinarytree1(nums, leftindex, maxindex);

root.right = constructmaximumbinarytree1(nums, maxindex + 1, rightindex);

return

root;}}

確定根節點的值,把根節點確定出來,然後遞迴構造左右子樹

前序遍歷第乙個值為根節點

root=treenode(preorder[0])

根節點在中序遍歷中的位置為切割點

mid=inorder.index(preorder[0])

切割前序陣列,切成前序左陣列和前序右陣列

切割中序陣列,切成中序左陣列和中序右陣列

}//根據 idx 來遞迴找左右子樹

//只有乙個元素了

if (inright - inleft == 1)

//後序陣列postorder裡最後乙個即為根結點

int rootval = postorder[postright - 1];

treenode root = new

treenode(rootval);

int rootindex = 0;

//根據根結點的值找到該值在中序陣列inorder裡的位置

for (int i = inleft; i < inright; i++)

}//根據rootindex劃分左右子樹

root.left =buildtree1(inorder, inleft, rootindex,

postorder, postleft, postleft + (rootindex -inleft));

root.right = buildtree1(inorder, rootindex + 1, inright,

postorder, postleft + (rootindex - inleft), postright - 1);

return

root;}}

力扣程式設計題

1.給定乙個整數陣列 nums 和乙個整數目標值 target,在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。你可以按任意順序返回答案。列舉陣列中的每乙個數 x,尋找陣列中是否存在 target x。2.數...

力扣演算法題

給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。但是,陣列中同乙個元素不能使用兩遍。思路一 暴力列舉 將陣列中的每個元素都拿來與後面的元素逐一相加,然後與目標值作比較,如果正確則直接返回下標值。那麼,就會有最壞的情況...

力扣演算法題

題目描述如下 羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況...