378. 将二叉查找树转换成双链表

将一个二叉查找树按照中序遍历转换成双向链表。

样例

给定一个二叉查找树:

    4/ \2   5/ \
1   3

返回 1<->2<->3<->4<->5

源代码如下:

/**
  * Definition of Doubly-ListNode
 * class DoublyListNode {
 * public:
 *     int val;
 *     DoublyListNode *next, *prev;
 *     DoublyListNode(int val) {
 *         this->val = val;
 *         this->prev = this->next = NULL;
 *     }
 * } * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: The root of tree
     * @return: the head of doubly list node
     */
    DoublyListNode * bstToDoublyList(TreeNode * root) {
        // write your code here
        if (root==NULL) return NULL;
        
        DoublyListNode *left = bstToDoublyList(root->left);
        DoublyListNode *right = bstToDoublyList(root->right);
        
        DoublyListNode *lefttail = left;
        
        while (lefttail!=NULL && lefttail->next!=NULL){
            lefttail = lefttail->next;
        }
        DoublyListNode *mid = new DoublyListNode(root->val);
        mid->prev = lefttail;
        if (lefttail!=NULL){
            lefttail->next = mid;
        }
        mid->next = right;
        if (right!=NULL){
            right->prev = mid;
        }
        if (left!=NULL) {
            return left;
        }
        else return mid;
        
        
        
        
    }
};

Lintcode -378. 将二叉查找树转换成双链表相关推荐

  1. LintCode 378. 将二叉树转换成双链表(非递归遍历)

    文章目录 1. 题目 2. 解题 1. 题目 将一个二叉树按照中序遍历转换成双向链表. 样例 样例 1: 输入:4/ \2 5/ \1 3 输出: 1<->2<->3<- ...

  2. java数组转换成单链表_【转】单向链表(单链表)的Java实现

    最近被问到链表,是一个朋友和我讨论Java的时候说的.说实话,我学习编程的近一年时间里,学到的东西还是挺少的.语言是学了Java和C#,关 于Web的学了一点Html+css+javascript.因 ...

  3. 将二叉树的叶子结点转换成单链表,并返回最左叶子结点的地址(链头)

    http://blog.csdn.net/wangyangkobe/article/details/6756700 编写一个递归算法,利用叶子结点中空的 右连接指针域rchild,将所有叶子结点自左向 ...

  4. 二叉查找树转换成有序的双向链表

    首先对于二叉查找树的定义和性质,以及如何得到二叉查找树某个节点的子树下的最大值和最小值和插入一个值的内容可以参考这两篇文章: (1)http://www.cnblogs.com/chenping-98 ...

  5. 教程 转换制作双色3D打印模型

    近期,创想三维自主设计的单喷双色3D打印方案取得突破,经过严格的综合测试后,已应用在最近发布的CR-5S上,精度和可靠性非常出色.而在不久之后,创想三维还将会推出一款全新3D打印机,除了采用最新双色方 ...

  6. 新手学习算法----二叉树(将一个二叉查找树按照中序遍历转换成双向链表)

    题目:将一个二叉查找树按照中序遍历转换成双向链表. 给定一个二叉查找树: 4/ \2 5/ \ 1 3 返回 1<->2<->3<->4<->5. 思路 ...

  7. 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】...

    [109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 ...

  8. 经典面试题:将有序数组、有序链表转换成平衡二叉树

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水. 将有序数组转换成平衡二叉树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜 ...

  9. 王道综合题17.设计一个算法用于判断带头结点的循环双链表是否对称及其注意思考:while循环第二个判断条件易误写成p->next!=q,分析这样会产生什么问题。

    算法思想: 让p从左向右扫描,q从右向左扫描,直到它们指向同一结点(p==q,当循环双链表中结点个数为奇数时)或相邻(p->next=q或q->prior=p,当循环双链表中结点个数为偶数 ...

最新文章

  1. CascadingStyleSheets
  2. 九零后程序员心塞大哭:“我累的心脏疼,父母却说我工作很轻松”
  3. SSD: ReLU6
  4. Hadoop集群搭建之问题锦集
  5. STM32F4温湿度
  6. C语言 位段(位域)总结
  7. 10 个实用技巧,让 Finder 带你飞
  8. nodejs-ORM 框架 waterline和Sails
  9. 【bootstrap】-----使用核心
  10. UDA: A user-difference attention for group recommendation
  11. SEO: 使用 rel=canonical 为类似网页或重复网页指定权威网页
  12. 启锐 588 打印机每次打印都流出一部分,没有重新切换纸张
  13. 【Windows系统笔记】打造一个适合自己的windows系统
  14. 健康生活无需等待,松下罗密欧系列洗衣机守护你的四月天
  15. 【项目实战二】基于模板匹配和形态学操作的信用卡卡号识别(OpenCV+Python)
  16. Java 实现钉钉企业内部应用免登
  17. git pull fatal: 拒绝合并无关的历史
  18. JAVA程序员面试30问(附带答案)
  19. 关于SSD寿命问题的探讨
  20. i春秋-Web(一)

热门文章

  1. Android Studio代码检查lint使用
  2. jira 饼图中文乱码 显示“口口口”
  3. 水银开关控制LED灯灯灭
  4. EXFO 光时反射仪MAX-730C-SM1基本规格
  5. appcrash php5ts.dll,appcrash
  6. Cocos Studio学习笔记实战第一篇-我们山寨一个那年那兔那些事(看效果)
  7. Spring Cloud Gateway 概述 《重新定义Spring Cloud实战》读书笔记
  8. BAT小米奇虎美团迅雷携程等等各大企业校招,笔试面试题。
  9. 证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12)
  10. PGP安装,生成密钥及上传服务器的完整步骤