二叉搜索树转化为排序的二叉链表(《剑指offer》27题)

中序遍历,但是记住要保存前一个节点的指针,因此要用到指针的指针作为参数。
同时,因为最后要返回头指针,不要把返回头指针这件事情也放在一起,写代码起来才比较方便。

    public static void toOrderedBidirectLink(BinaryTreeNode root){
        if(root==null) {
            return;
        }

        BinaryTreeNode lastNode = toOrderedBidirectLink2(root, null);

        BinaryTreeNode node = lastNode;
        while(node.leftNode!=null)
            node = node.leftNode;
            
        return node;
    }
    
    private static BinaryTreeNode toOrderedBidirectLink2(BinaryTreeNode root, BinaryTreeNode lastNodeInList) {
        if(root.leftNode!=null) {
            lastNodeInList = toOrderedBidirectLink2(root.leftNode, lastNodeInList);
        }
        
        if(lastNodeInList==null) {
            lastNodeInList = root;
            lastNodeInList.leftNode = null;
        } else {
            lastNodeInList.rightNode = root;
            root.leftNode = lastNodeInList;
        }

        if(root.rightNode!=null) {
            return toOrderedBidirectLink2(root.rightNode, root);
        }else {
            return root;
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,526评论 1 31
  • 1. 链表 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,...
    Mr希灵阅读 5,683评论 1 17
  • 写在前面 这一期与往常的节目不一样,罗胖没有去讲故事,而是分享了自2015年以来,公司的运营策略和他的思考判断,并...
    知鱼君阅读 1,631评论 3 0
  • 我,现在研一,每天7:26起床,每天10:30回寝室。 从黑龙江来到南京,从复试完我认为我可以妥妥的按照规划好的职...
    jizimo阅读 199评论 0 1
  • 有时候觉得很奇怪 有些人 吃很多次饭 定时去一起看电影 明明说作是朋友 却没有更亲近的感觉
    二肉肉阅读 141评论 0 0