構造二叉樹,根節點要做的就是想辦法把自己構造出來,
先找到陣列中的最大值,然後再用遞迴呼叫左右陣列構造左右子樹
前序遍歷
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 通常情況...