二叉搜索树与双向链表

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&&tqId=11179&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

要将二叉搜索树转化为一个排序的双向链表,而且要求不能创建任何新的结点,只能调整树中结点指针的指向。
所以我们可以利用二叉树的left和right,用left代替常规双向链表的前一个指针,right代表next。
因为是二叉搜索树,所以我们就必须用到中序遍历,因为中序遍历出来的数就是从小到大的数,但是我们还需要保存前一个节点,所以我们就需要用一个变量来存储上一个节点。

public class Solution {
    TreeNode pre = null;  /*用来存储上一个节点*/
    TreeNode head = null;  /*头节点*/
    // LDR
    public TreeNode Convert(TreeNode pRootOfTree) {
        toList(pRootOfTree);  /*中序遍历*/
        return head;
    }

    public void toList(TreeNode node){
        if(node == null)
            return;
        toList(node.left);
        node.left = pre;  /*node的前一个节点就是pre*/
        if(pre != null)   /*当pre不为空时,它的下一个节点就是当前节点*/
            pre.right = node;
        pre = node;   /*此时当前节点就需要赋给pre,可以在遍历下个节点时使用*/
        if(head == null)   /*当head==null时,证明当前是第一个节点,所以node作为第一个节点*/
            head = node;
        toList(node.right);
    }
}
剑指offer 文章被收录于专栏

为刷过的每一道题都书写一篇题解,便于重复练习~

全部评论

相关推荐

微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
周述安:这都能聊这么多。别人要是骂我,我就会说你怎么骂人?他要是继续骂我,我就把评论删了。
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务