二叉搜索树与双向链表(剑指offer)

二叉搜索树与双向链表(剑指offer)


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

解法:二叉搜索树就是左子树都小于根节点,右子树大于根节点,所以思路就是中序遍历(左中右)就是已经是从小到大的顺序的,可以设置一个前驱节点prenode,初始为null,通过中序遍历,每遍历一个节点,该节点left为prenode,prenode的right为该节点,这就形成了链,接着prenode=该节点,继续遍历该树,就一直左中右形成链。

public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
    if(pRootOfTree==null){
        return null;
    }
    TreeNode head = Operate(pRootOfTree,null);
    while(head.left!=null){
        head = head.left;
    }
    return head;
}
public TreeNode Operate(TreeNode pRootOfTree,TreeNode prenode){
    if(pRootOfTree.left!=null){
        prenode = Operate(pRootOfTree.left,prenode);
    }
    pRootOfTree.left = prenode;
    if(prenode!=null){
        prenode.right = pRootOfTree;
    }
    prenode = pRootOfTree;
    if(pRootOfTree.right!=null){
        prenode = Operate(pRootOfTree.right,prenode);
    }
    return prenode;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值