【数据结构刷题java】将二叉搜索树转化成有序双向链表

【数据结构刷题java】将二叉搜索树转化成有序双向链表,第1张

【数据结构刷题java】将二叉搜索树转化成有序双向链表 数据结构刷题java——将二叉搜索树转化成有序双向链表

[题目链接](二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com))

因为是二叉搜索树,所以使用中序遍历就可以将二叉树转变为有序的。

同时,二叉树和链表相同,都是有3个节点:一个数值域,两个指针域

综上两条性质,可以在中序遍历的时候改变二叉树左右指向,使它变为双向链表

这个题真的是太妙了,就是从分利用了二叉搜索树和中序遍历

具体的解释在代码注释中:

public class Solution {
    public TreeNode prev=null;
    public void Inoreder(TreeNode root){
        if(root==null) return;
        //中序遍历之左子树遍历
        Inoreder(root.left);
        //中序遍历之 *** 作:改变节点的指向
        //第一次root.left指向的prev是null,后来的prev
        //是保存的前一次的中序遍历的值,正好使整个链表有序
        root.left=prev;
        //如果使非空的节点,因为使双向链表,所以prev和root要链接起来
        if(prev!=null)
            prev.right=root;
        //保存当前的根节点,好返回给上一层
        prev=root;
        Inoreder(root.right);
        
    }
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree==null) return null;
        Inoreder(pRootOfTree);
        //找到头节点,对于二叉搜索树来说,
        //一直找左节点直到左节点是空为止
        TreeNode node=pRootOfTree;
        while(node.left!=null){
            node=node.left;
        }
        return node;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713033.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存