二叉搜索樹與雙向鏈表_26

題目描述

輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。

Picture14.png

 

package tree;

import java.util.ArrayList;

/*
    二叉搜索樹與雙向鏈表
    輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。
    要求不能創建任何新的結點,只能調整樹中結點指針的指向。
 */
public class Convert_26 {

    public TreeNode_26 Convert(TreeNode_26 pRootOfTree) {
        if (pRootOfTree==null)
            return null;
        ArrayList<TreeNode_26> list=new ArrayList<>();
        Convert(list,pRootOfTree);
        return Convert(list);
    }

    //中序遍歷
    public void Convert(ArrayList<TreeNode_26> list,TreeNode_26 root){
        if (root!=null){
            Convert(list,root.left);
            list.add(root);
            Convert(list,root.right);
        }
    }

    public TreeNode_26 Convert(ArrayList<TreeNode_26> list){
        TreeNode_26 head=list.get(0);
        TreeNode_26 cur=head;
        for (int i=1;i< list.size();++i){
            TreeNode_26 node=list.get(i);
            node.left=cur;
            cur.right=node;
            cur=node;
        }
        return head;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章