题目:

剑指offer的题目有挺多都挺典型的,就像这一道。不过书中的代码写的真是ugly,有很多题目LeetCode上都有,可以去LeetCode讨论区看看,经常有一些大神分享,写的代码真是高效、简洁、清晰,剑指offer上的代码不仅变量名定义又长又不知所云,让人看着就很不清晰明了,还有各种没必要的判断让代码看起来非常不直观。

思路:书中已经写的挺清楚了,通过中序遍历来做。

package com.ss.offer;

/**
* 2018-09-15 下午11:18.
*
* @author blank
*/
public class BST2LinkedList {
public static void main(String[] args) throws Exception {
BinaryTreeNode root = new BinaryTreeNode(10);
BinaryTreeNode six = new BinaryTreeNode(6);
BinaryTreeNode four = new BinaryTreeNode(4);
BinaryTreeNode eight = new BinaryTreeNode(8);
BinaryTreeNode fourteen = new BinaryTreeNode(14);
BinaryTreeNode twelve = new BinaryTreeNode(12);
BinaryTreeNode sixteen = new BinaryTreeNode(16);
root.left = six;
root.right = fourteen;
six.left = four;
six.right = eight;
four.left = null;
four.right = null;
eight.left = null;
eight.right = null;
fourteen.left = twelve;
fourteen.right = sixteen;
twelve.left = null;
twelve.right = null;
sixteen.right = null;
sixteen.left = null;
BinaryTreeNode res = convert(root);
while (res != null) {
System.out.println(res.val);
res = res.right;
}
} static BinaryTreeNode convert(BinaryTreeNode root) { BinaryTreeNode[] lastNode = new BinaryTreeNode[1];
convertNode(root, lastNode);
BinaryTreeNode headNode = lastNode[0];
while (headNode.left != null)
headNode = headNode.left;
return headNode; } static void convertNode(BinaryTreeNode root, BinaryTreeNode[] last) {
if (root == null) {
return;
}
convertNode(root.left, last);
if (last[0] != null) {
last[0].right = root;
}
root.left = last[0];
last[0] = root;
convertNode(root.right, last);
} private static class BinaryTreeNode {
int val;
BinaryTreeNode left;
BinaryTreeNode right; public BinaryTreeNode(int val) {
this.val = val;
}
}
}

剑指offer——27. 二叉搜索树与双向链表(Java版)的更多相关文章

  1. 剑指offer 27二叉搜索树与双向链表

    class Solution { public: void ConvertNode(TreeNode* pRootOfTree,TreeNode** pre) { if(pRootOfTree) { ...

  2. 剑指 Offer 36. 二叉搜索树与双向链表 + 中序遍历 + 二叉排序树

    剑指 Offer 36. 二叉搜索树与双向链表 Offer_36 题目描述 题解分析 本题考查的是二叉树的中序遍历以及二叉排序树的特征(二叉排序树的中序遍历序列是升序序列) 利用排序二叉树中序遍历的性 ...

  3. 剑指 Offer 36. 二叉搜索树与双向链表

    剑指 Offer 36. 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的 ...

  4. 【剑指Offer】二叉搜索树与双向链表 解题报告(Python)

    [剑指Offer]二叉搜索树与双向链表 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interview ...

  5. 【Java】 剑指offer(36) 二叉搜索树与双向链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不 ...

  6. 【剑指offer】二叉搜索树转双向链表,C++实现

    原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...

  7. Go语言实现:【剑指offer】二叉搜索树与双向链表

    该题目来源于牛客网<剑指offer>专题. 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. Go语言实现: type T ...

  8. 【剑指offer】二叉搜索树转双向链表

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26623795 题目描写叙述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表. ...

  9. 《剑指offer》二叉搜索树和双向链表

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

随机推荐

  1. 原生JS写的ajax函数

    参照JQuery中的ajax功能,用原生JS写了一个ajax,功能相对JQuery要少很多,不过基本功能都有,包括JSONP. 调用的方式分为两种: 1. ajax(url, {}); 2. ajax ...

  2. 深入理解JavaScript系列(26):设计模式之构造函数模式

    介绍 构造函数大家都很熟悉了,不过如果你是新手,还是有必要来了解一下什么叫构造函数的.构造函数用于创建特定类型的对象——不仅声明了使用的对象,构造函数还可以接受参数以便第一次创建对象的时候设置对象的成 ...

  3. wex5新增数据库

    首先是要打开Wex5   (这是废话,下面进入正题..) 1.第一步,找到界面中的 ”窗口” 点击打开,你会看到一个 “ 首选项 ”按照流程也要打开 (囧),,,,,,,,看图为重 2.当你打开了 “ ...

  4. Docker 创建镜像、修改、上传镜像

    Docker 创建镜像.修改.上传镜像 –创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 一.创建镜像 创建镜像有很多方法,用户可以从 Do ...

  5. Hadoop的安装与配置(虚拟机中的伪分布模式)

    1引言 hadoop如今已经成为大数据处理中不可缺少的关键技术,在如今大数据爆炸的时代,hadoop给我们处理海量数据提供了强有力的技术支撑.因此,了解hadoop的原理与应用方法是必要的技术知识. ...

  6. 标头停止点不能位于宏或#if块中.

    使用VS2010在项目中编写C++头文件**.h时提示: PCH 警告: 标头停止点不能位于宏或#if块中 原因:vs2010的智能感知要求.h必须以非#if系列的预编译指令打头 正确方法:将所有含有 ...

  7. GitHub无法push的问题

    问题背景 换了台别人用过的电脑想要将文件push到github上,出现下面报错 remote: Permission to *****(我的)/gittest.git denied to *****( ...

  8. C# linq to sql

    参考文章地址:http://www.cnblogs.com/yubaolee/p/BestLinqQuery.html   以下是我自己的总结: 表结构: 本文全部代码基于:UserInfo与Clas ...

  9. 一对多sql

    <!-- 分页查询派货成本 --> <select id="queryCostRegionPriceBycondtion" parameterMap=" ...

  10. 如何在Chrome development tool里查看C4C前台发送的请求细节

    我们可以在Chrome development tool的network tab里观察到从前台UI发送到后台的HTTP请求: 更多Chrome Development Tool的使用工具请查看我的博客 ...