二叉搜索树与双向链表——一个对于我来说比较难的题目。二叉树的中序遍历

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

思路:之前做个一个二叉搜索树的题目,了解了二叉搜索树的特点,即左子树小于节点,右子树大于节点,所以这个题目的大概意思就是中序遍历二叉搜索树,并且搞成双向链表(互相对应的),之前学数据结构的时候,对这些都是很熟悉的,代码也都会写,过去一年,现在都忘记了,所以对于这个题目,我想了很久,并且看了别人的解决方式,当然总体思路还是参用递归的,只是要想清楚怎么递归,代码大概的思路如下:

1、先遍历左子树

2、找到最底层的左子树,并构造双链表

3、将目前的根节点追加到左子树后面。

4、将右子树构建双链表,

5、将右子树节点追加到根节点后面。

emmm,说实话,感觉蛮难理解的。可以看代码模拟一遍过去就懂了

代码:

java:

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

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

    }

}
*/
public class Solution {
    public TreeNode Convert(TreeNode pRootOfTree) {
       
        if(pRootOfTree==null)
            return null;
        if(pRootOfTree.left==null&&pRootOfTree.right==null){
            return pRootOfTree;
        }
         TreeNode root=Convert(pRootOfTree.left);
         TreeNode p=root;
        while(p!=null&&p.right!=null){
            p=p.right;
        }
        if(p!=null){
            p.right=pRootOfTree;
            pRootOfTree.left=p;
        }
        TreeNode root1=Convert(pRootOfTree.right);
        if(root1!=null){
            pRootOfTree.right=root1;
           root1.left=pRootOfTree;
        }
        return root!=null?root:pRootOfTree;
    }
}

js:

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function Convert(root)
{
    if(root==null)
        return null;
    if(root.left==null&&root.right==null)
        return root;
    var left1=Convert(root.left);
    var p=left1;
    while(p!=null&&p.right!=null){
        p=p.right;
    }
    if(p!=null){
        p.right=root;
        root.left=p;
    }
    var right1=Convert(root.right);
    if(right1!=null){
        root.right=right1;
        right1.left=root;
    }
    return left1!=null?left1:root;
    // write code here
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值