溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣實現重建python二叉樹

發布時間:2021-12-13 15:54:25 來源:億速云 閱讀:442 作者:柒染 欄目:大數據

今天就跟大家聊聊有關怎樣實現重建python二叉樹,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。


題目:

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹并返回。

思路:

看到這個題目就明白需要花點時間,上數據結構課的時候,明白了怎么根據前序和中序可以唯一確定一顆二叉樹,并且也知道怎么重建,但是要用代碼實現起來,還是有點困難,畢竟自己很久沒有寫了。我知道要實現那種思路,肯定需要借用遞歸或者歸并。但是不是理的很清,后面覺得借鑒別人怎么實現的,看完之后,決定自己動手,最開始用java編寫,寫完之后,出現空指針異常和數組非法訪問錯誤,與別人代碼對了很久,最后終于找到錯誤了,這個題困了我一天。對于空指針異常,自己建立對象或者聲明數組的時候最好還是初始化,不要等到后面才想起,數組非法訪問是由于自己聲明的數組太大,沒有很嚴謹,導致我前面一直找不到自己錯在哪,感覺沒有越界,把數組大小嚴格改到題目要求所需之后,就提交成功了,可能之前寫C語言寫習慣了,沒有注意這方面,以后還是嚴謹一點。用js代碼實現比Java要方便很多,比較順利,雖然也出現錯誤,但是解決了java坑之后,來解決Js的坑就快很多了;

對于這種題目,主要還是想清楚怎么用遞歸實現,注意細節

java實現代碼:

public class Solution {
 
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {

       int len=in.length;
       if(len==0)
           return null;
       TreeNode tree=new TreeNode(pre[0]);
       int i,temp=-1,j=0;
       for(i=0;i<len;i++){
           if(pre[0]==in[i]){
               temp=i;
               break;
           }
       }
       
   int[] left=new int[temp];
     int[] leftpre=new int[temp];
       for(i=0;i<temp;i++){
           left[i]=in[i];
           leftpre[i]=pre[i+1];
       }//左子樹
    int[] right=new int[len-temp-1];
         int[] rightpre=new int[len-temp-1];
       for(i=temp+1;i<len;i++){
           right[j]=in[i];
           rightpre[j]=pre[i];
           j++;
       }//右子樹
       tree.left=reConstructBinaryTree(leftpre,left);
       tree.right=reConstructBinaryTree(rightpre,right);
       return tree;
   }

JavaScript實現代碼:

/* function TreeNode(x) {
   this.val = x;
   this.left = null;
   this.right = null;
} */
function reConstructBinaryTree(pre, vin)
{
     var len=vin.length;
       if(len==0)
           return null;
     var tree=new TreeNode(pre[0]);
       var i,temp=-1,j=0;
       for(i=0;i<len;i++){
           if(pre[0]==vin[i]){
               temp=i;
               break;
           }
       }
      var left=new Array(temp);
     var  leftpre=new Array(temp);
       for(i=0;i<temp;i++){
           left[i]=vin[i];
           leftpre[i]=pre[i+1];
       }//左子樹
   var right=new Array(len-temp-1);
       var rightpre=new Array(len-temp-1);
       for(i=temp+1;i<len;i++){
           right[j]=vin[i];
           rightpre[j]=pre[i];
           j++;
       }//右子樹
       tree.left=reConstructBinaryTree(leftpre,left);
       tree.right=reConstructBinaryTree(rightpre,right);
   
       return tree;
   // write code here
}

看完上述內容,你們對怎樣實現重建python二叉樹有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女