首页 > 其他 > 详细

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

时间:2020-06-07 00:03:40      阅读:51      评论:0      收藏:0      [点我收藏+]

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
 
 
题目链接:
 
 
 
关键点:
更新当前节点时,不需要关心下一个节点,只需要知道前一个节点,利用前一个节点维护向右的关系。
 
分析:
中序遍历,加一个维护前一个节点的变量,始终维护当前节点与前一个节点,来实现树转化成列表。
 
 
 
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    TreeNode head;
    TreeNode pre = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
         if(null == pRootOfTree){
             return null;
         }
        transport(pRootOfTree);
        return head;
    }
    
    public void transport(TreeNode cur){
        //左节点不为空,则一直往下找
        if(cur.left != null){
            transport(cur.left);
        }
        //更新当前节点的左边位置
        cur.left = pre;
        //更新上一个节点的右边位置。只有第一个节点没有左节点
        if(pre != null){
            pre.right = cur;
        }else{
            //只有第一个节点没有左节点。 存一下链表头
            head = cur;
        }
        //将当前节点更新为前一个节点
        pre = cur;
        //更新右子树
        if(cur.right != null){
            transport(cur.right);
        }
    }
}

 

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

原文:https://www.cnblogs.com/MoonBeautiful/p/13057620.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!