二叉搜索树与双向链表

原创 2017年01月03日 10:05:04

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

Idea

根据二叉搜索树的性质,左<根<右

其中序遍历正好是一个从小到大的排序。

本题借助二叉搜索树的中序遍历的递归思路:

1.将左子树转换为左序列

2.保存左序列到头结点,并遍历到尾结点,和当前根结点连接

3.将右子树转换为左序列

4.保存右序列到头结点,和当前根结点连接

5.返回最终列表的头结点

Code

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree==null){
            return null;
        }
        if(pRootOfTree.left==null&&pRootOfTree.right==null){
            return pRootOfTree;
        }
        
        TreeNode left=Convert(pRootOfTree.left);
        TreeNode p=left;
        while(p!=null&&p.right!=null){
            p=p.right;
        }
        if(left!=null){
            p.right=pRootOfTree;
            pRootOfTree.left=p;
        }
        TreeNode right=Convert(pRootOfTree.right);
        if(right!=null){
            pRootOfTree.right=right;
            right.left=pRootOfTree;
        }
        return left!=null?left:pRootOfTree;
    }
}


二叉搜索树与双向链表(java版)

题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 分析:      对于二叉搜索树,用中序搜索...
  • hll174
  • hll174
  • 2016年03月27日 22:18
  • 979

【剑指Offer】二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。算法描述使用递归,分别去将当前节点的左右子树变成双向链表,然后获取左边链表的最...
  • zgljl2012
  • zgljl2012
  • 2015年09月19日 02:11
  • 1851

剑指offer 面试题27—二叉搜索树与双向链表

题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表,要求不能创建任何新节点,只能调整树中结点指针的指向。最后输出排序后双向链表。 基本思想: 二叉树中每个节点都有两个...
  • wtyvhreal
  • wtyvhreal
  • 2015年05月11日 22:19
  • 874

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

思路:这道题目关键在于不能创建新的节点,如不然,我们可以直接将二叉排序树中序遍历保存到一个数组中,而后再建立一个双性链表,将数据保存到双向链表里。 这里不能创建新节点,我们只能改变节点的指向左...
  • mmc_maodun
  • mmc_maodun
  • 2014年05月23日 08:26
  • 4091

二叉搜索树与双向链表Java

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的方向。 思路:在二叉搜索树中,左子结点的值总是小于父子结点的值,右子结点的值总是大于...
  • u013238950
  • u013238950
  • 2016年03月08日 18:51
  • 852

剑指offer:二叉搜索树与双向链表(java)

题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建新的结点,只能调整树中结点指针的指向。 比如如下图中的二叉搜索树,则输出转换之后的排序双向链表为:     由于要...
  • abc7845129630
  • abc7845129630
  • 2016年10月03日 22:12
  • 258

二叉搜索树转换为有序双向链表

一、问题描述 输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现。 二、实现思路 在二叉搜索树...
  • ljianhui
  • ljianhui
  • 2014年03月28日 00:04
  • 17734

《编程之美》——二叉搜索树转换为排序双向链表

题目: 输入一棵二叉搜索树,将该二叉搜索树转换为一个排序的双向链表。要求不能创建任何新的节点,只能调整树中指针的指向。分析与解法: 1、由于要求链表是有序的,可以借助二叉树中序遍历,因为中序遍...
  • zengzhen_CSDN
  • zengzhen_CSDN
  • 2016年04月20日 10:26
  • 927

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

题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 /* public class TreeNode { int va...
  • kangaroo835127729
  • kangaroo835127729
  • 2015年04月19日 21:42
  • 1233

面试题27:二叉搜索树和双向链表

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点的指针的指向。        开始没什么思路。但是想到二叉树的所有题目几乎都可以用递归来做...
  • hyp1977
  • hyp1977
  • 2016年07月04日 19:39
  • 123
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉搜索树与双向链表
举报原因:
原因补充:

(最多只允许输入30个字)