二叉搜索樹轉換為雙向鏈表


https://blog.nowcoder.net/n/4fa351e14ee64514babb6742ee023627

 

題意整理

  • 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。

方法一(遞歸)

1.解題思路

由於二叉搜索樹的中序遍歷是從小到大依次輸出的,所以可以利用中序遍歷,在遍歷的過程中,逐個改變當前節點的指向。

  • 預先定義一個pre指針,指向當前節點的前一個節點。以及一個head指針指向頭節點。
  • 當pre為空時,可以確定當前節點為雙向鏈表的頭節點head。其它情況下則可以將pre的后繼指向當前節點cur。
  • 遍歷過程中,對於每一個cur,都應將其前驅指向pre。同時不斷跟新pre。最后返回head即可。

圖解展示: alt

2.代碼實現

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    //pre記錄當前節點前一個,head記錄頭節點
    TreeNode pre=null,head=null;
    
    public TreeNode Convert(TreeNode pRootOfTree) {
        //為空判斷
        if(pRootOfTree==null) return null;
        //遞歸
        dfs(pRootOfTree);
        return head;
        
    }
    
    private void dfs(TreeNode cur){
        //遞歸終止條件
        if(cur==null) return;
        //遍歷左子樹
        dfs(cur.left);
        //如果pre為空,說明當前是頭節點
        if(pre==null) head=cur;
        //將pre的right指針指向cur
        else pre.right=cur;
        //將cur的left指針指向pre
        cur.left=pre;
        //更新pre
        pre=cur;
        //遍歷右子樹
        dfs(cur.right);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM