1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ?LeetCode刷題實(shí)戰(zhàn)105:從前序與中序遍歷序列構(gòu)造二叉樹(shù)

        共 1291字,需瀏覽 3分鐘

         ·

        2020-11-26 21:59

        算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

        今天和大家聊的問(wèn)題叫做?從前序與中序遍歷序列構(gòu)造二叉樹(shù),我們先來(lái)看題面:

        https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/

        Given preorder and inorder traversal of a tree, construct the binary tree.

        Note:

        You may assume that duplicates do not exist in the tree.

        題意



        根據(jù)一棵樹(shù)的前序遍歷與中序遍歷構(gòu)造二叉樹(shù)。
        注意:
        你可以假設(shè)樹(shù)中沒(méi)有重復(fù)的元素。

        樣例

        解題

        https://www.cnblogs.com/xiaobaidashu/p/11825787.html

        本題思路:了解前序遍歷和中序遍歷的特點(diǎn)并利用遞歸算法進(jìn)行求解。前序特點(diǎn):第一個(gè)元素必定是根節(jié)點(diǎn),而中序遍歷的特點(diǎn)是,根節(jié)點(diǎn)左右必定是左右子樹(shù)的節(jié)點(diǎn)的集合。

        步驟一:構(gòu)建遞歸函數(shù)(前序遍歷數(shù)組:preorder,int num 根節(jié)點(diǎn)在前序遍歷數(shù)組的index值,當(dāng)前中序遍歷的list,root,當(dāng)前根節(jié)點(diǎn))

        步驟二:通過(guò)preorder[num]找到當(dāng)前中序遍歷list中的左右子樹(shù)所有值,并將左子樹(shù)集合放入leftlist中,右子樹(shù)集合放入rightlist中。

        步驟三:通過(guò)前序中序原理,找到左子樹(shù)集合和右子樹(shù)集合的當(dāng)前根節(jié)點(diǎn)root.left和root.right。并將num值變成當(dāng)前根節(jié)點(diǎn)值的index。重復(fù)步驟一重復(fù)遞歸函數(shù)(preorder,newleftnum,leftlist,root.left)和(preorder,newrightnum,rightlist,root.right)

        步驟四:當(dāng)list中只剩下根節(jié)點(diǎn)時(shí),則返回,最后輸出root。

        class?Solution?{
        ????public?TreeNode buildTree(int[] preorder, int[] inorder) {
        ??????????if(preorder.length>0) {
        ?????????????TreeNode root =new?TreeNode(preorder[0]);
        ?????????????List order=new?ArrayList();
        ?????????????for(int?i=0;i?????????????????order.add(inorder[i]);
        ?????????????}
        ?????????????getTree(preorder,0,order,root);
        ?????????????return?root;
        ?????????} else?{
        ?????????????return?null;
        ?????????}
        ????}
        ????
        ????public?void?getTree(int[]preorder ,int?number,List order,TreeNode root) {
        ????????if(order.size()==1) {
        ????????????return?;
        ????????}
        ????????
        ????????int?ordernum=order.indexOf(preorder[number]);
        ????????if(ordernum>0) {
        ????????List leftOrder=new?ArrayList(order.subList(0, ordernum));
        ????????for(int?i=number+1;i????????{
        ????????????if(leftOrder.contains(preorder[i])) {
        ????????????????root.left=new?TreeNode(preorder[i]);
        ????????????????getTree(preorder,i,leftOrder,root.left);
        ????????????????break;
        ????????????}
        ????????????
        ?????????}
        ????????}
        ????????
        ????????if(ordernum-1)
        ????????{
        ????????????List rightOrder=new?ArrayList(order.subList(ordernum+1, order.size()));
        ????????????for(int?j=number+1;j????????????????if(rightOrder.contains(preorder[j])) {
        ????????????????????root.right=new?TreeNode(preorder[j]);
        ????????????????????getTree(preorder,j,rightOrder,root.right);
        ????????????????????break;
        ????????????????}
        ????????????}
        ????????}
        ???????
        ????}
        }


        好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力。


        上期推文:

        LeetCode1-100題匯總,希望對(duì)你有點(diǎn)幫助!
        LeetCode刷題實(shí)戰(zhàn)101:對(duì)稱(chēng)二叉樹(shù)
        LeetCode刷題實(shí)戰(zhàn)102:二叉樹(shù)的層序遍歷
        LeetCode刷題實(shí)戰(zhàn)103:二叉樹(shù)的鋸齒形層次遍歷
        LeetCode刷題實(shí)戰(zhàn)104:二叉樹(shù)的最大深度

        瀏覽 52
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天综合网站永久 | 在公共场合被cao到高潮 | 欧美人妻视频 | 免费操逼的一级毛片 | 23部人禽伦交 | 操逼视频软件 | 欧美一级片在线播放视频 | 久久99热狠狠色一区二区 | 国产主播久久 | 美女扒开粉嫩尿囗的桶爽www |