zoukankan      html  css  js  c++  java
  • JZ26 二叉搜索树与双向链表

    描述

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示
     
    注意:
    1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继
    2.返回链表中的第一个节点的指针
    3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构
    4.你不用输出或者处理,示例中输出里面的英文,比如"From left to right are:"这样的,程序会根据你的返回值自动打印输出
     
    示例:
    输入: {10,6,14,4,8,12,16}
    输出:From left to right are:4,6,8,10,12,14,16;From right to left are:16,14,12,10,8,6,4;
    解析:
    输入就是一棵二叉树,如上图,输出的时候会将这个双向链表从左到右输出,以及
    从右到左输出,确保答案的正确

    示例1

    输入:
    {10,6,14,4,8,12,16}
    返回值:
    From left to right are:4,6,8,10,12,14,16;From right to left are:16,14,12,10,8,6,4;

    示例2

    输入:
    {5,4,#,3,#,2,#,1}
    返回值:
    From left to right are:1,2,3,4,5;From right to left are:5,4,3,2,1;
    说明:
                        5
                      /
                    4
                  /
                3
              /
            2
          /
        1
    树的形状如上图  

    ==========================================================================================================================

    解题思路:
       对于这道题,解题思路是中序遍历,并且再增设一个pre前指针即可。在java中不能传地址,于是设私有变量再调用就可以。中序遍历遍历到最左叶子节点,此时将它的转设为头节点,root.left = pre; 再判断它是不是头节点,
    如果是,则不需要pre.left = root;如果不是,则需要。然后继续往后递归遍历即可。
  • 相关阅读:
    【WPF】【基础】布局系统
    【设计】【托管扩展性框架】 MEF vs 2010 samples
    【wpf】【控件】内容控件
    【Wpf】【debug】Exception has been thrown by the target of an invocation.
    【设计模式】概述
    期待与悲催中的2012
    金额转为大写人民币
    使用vs2005的GridView控件,菜鸟问题。
    Microsoft Visual Studio 2005中使用水晶报表
    将金额小写转化成汉字大写(javascript)
  • 原文地址:https://www.cnblogs.com/hddandelion/p/15169891.html
Copyright © 2011-2022 走看看