分解让复杂问题简单化-36二叉搜索树与双向链表

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

 

 

思路1分析:步骤如下

1.通过中序遍历二叉搜索树的结点保存到数组中,得到了有序的数组,数组里面存储了树结点;
2.遍历一遍数组建立结点之间的联系;
 
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;
    }
}
*/
import java.util.ArrayList;
public class Solution {
    public TreeNode Convert(TreeNode root) {
        if(root==null) return null;
        ArrayList<TreeNode>list=new ArrayList<>();
        Inorder(list,root);//之后list里面保存了搜索二叉树的顺序遍历的结点序列
        return Change(list);
    }
    public void Inorder(ArrayList<TreeNode>list,TreeNode root){
        if(root!=null){
            Inorder(list,root.left);
            list.add(root);
            Inorder(list,root.right);
        }
    }
    public TreeNode Change(ArrayList<TreeNode>list){
        TreeNode head=list.get(0);
        TreeNode p=head;
        for(int i=1;i<list.size();i++){
            TreeNode tmp=list.get(i);
            tmp.left=p;
            p.right=tmp;
            p=tmp;
        }
        return list.get(0);
    }
}

思路2分析(递归):

 

posted @ 2020-06-03 15:41  冰河入梦~  阅读(116)  评论(0编辑  收藏  举报