题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

http://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

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

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

    }

}
*/
//题目:不创建新的节点,将二叉搜索树转换为链表
//思路:中序遍历二叉搜索树,保存到列表中,然后对列表中节点的左右指针进行修改。
import java.util.*;

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

    public void Convert(ArrayList<TreeNode> list, TreeNode node){
        if(node.left != null)
            Convert(list,node.left);
        list.add(node);
        if(node.right != null)
            Convert(list,node.right);
    }

    public TreeNode Convert(ArrayList<TreeNode> list){
        //注意此处数组越界:ArrayList.size()返回的是数组中元素个数,从0开始要减一
        for(int i=0;i<list.size()-1;i++){
            list.get(i+1).left = list.get(i);
            list.get(i).right = list.get(i+1);
        }
        return list.get(0);
    }
}
全部评论

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务