日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode-998 Maximum Binary Tree II(最大二叉树 II)

發(fā)布時(shí)間:2024/4/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode-998 Maximum Binary Tree II(最大二叉树 II) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者水平有限,所發(fā)僅為個(gè)人愚見,如有明顯謬誤,望斧正

此題給出了一棵二叉樹,并給出了此二叉樹的構(gòu)建方法,要求coder將給出的二叉樹還原成一維vector后,加上一個(gè)新的val,并再按照題目所給構(gòu)建方法構(gòu)建出一棵新的二叉樹。則此問題可分解為以下兩步:

① 將給出的樹還原成一維vector

②將vector加上val后構(gòu)建新樹

其中第二步就是Leetcode-654在解決的事情,給出一個(gè)一維vector以后,告訴你構(gòu)建方法,要求遞歸構(gòu)建樹。這里就不再多贅述。需要思考的是第一步,如何將給出的樹還原成vector。

當(dāng)給出一個(gè)數(shù)組要求構(gòu)建樹時(shí),可以很形象的感受到,如果將數(shù)組中的相鄰元素看作用硬棒連接起來的有質(zhì)量的小球,而你拎著一個(gè)值最大的節(jié)點(diǎn)往上提,提到一個(gè)很高的高度,其他節(jié)點(diǎn)因?yàn)橹亓Φ木壒?#xff0c;也都向上,而高度也都隨之增高但不高于你拎著的值最大的節(jié)點(diǎn)。被強(qiáng)調(diào)的,值最大的節(jié)點(diǎn),成了根節(jié)點(diǎn),而左邊和右邊的節(jié)點(diǎn)都成了左右子樹的節(jié)點(diǎn)。所以當(dāng)用一個(gè)掃描儀從左往右從下往上掃描時(shí),最先被掃到的節(jié)點(diǎn)必定在原數(shù)組的第一個(gè)。因此使用中序遍歷遍歷題目給出的一棵二叉樹,就可以得到原數(shù)組!這樣第一步也就解決了。

1 class Solution 2 { 3 public: 4 vector<int> nums; 5 void PreOrder(TreeNode* T) 6 { 7 if(T!=NULL) 8 { 9 PreOrder(T->left); 10 nums.push_back(T->val); 11 PreOrder(T->right); 12 } 13 } 14 TreeNode* insertIntoMaxTree(TreeNode* root, int val) 15 { 16 PreOrder(root); 17 nums.push_back(val); 18 return constructMaximumBinaryTree(nums); 19 } 20 TreeNode* constructMaximumBinaryTree(vector<int>& nums) 21 { 22 if(nums.size()==0)return NULL; 23 else if(nums.size()==1) 24 { 25 TreeNode * node=new TreeNode(nums[0]); 26 return node; 27 } 28 else 29 { 30 int max=0; 31 for(int i=0; i<nums.size(); i++) 32 { 33 if(nums[i]>nums[max]) 34 max=i; 35 } 36 vector<int> left_num,right_num; 37 for(int i=0; i<max; i++) 38 { 39 left_num.push_back(nums[i]); 40 } 41 for(int j=max+1; j<nums.size(); j++) 42 { 43 right_num.push_back(nums[j]); 44 } 45 TreeNode * node=new TreeNode(nums[max]); 46 node->left=constructMaximumBinaryTree(left_num); 47 node->right=constructMaximumBinaryTree(right_num); 48 return node; 49 } 50 } 51 }; Leetcode-998(C++)

?執(zhí)行用時(shí):28ms

轉(zhuǎn)載于:https://www.cnblogs.com/Asurudo/p/10428003.html

總結(jié)

以上是生活随笔為你收集整理的Leetcode-998 Maximum Binary Tree II(最大二叉树 II)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。