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

    题目描述

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
    ///////////////////////////////////////////////////////////////
    下午有点晕晕的,感觉不太好,改了改也算是过了,
    中序遍历,一开始不知道如何判断是该返回root左边的还是右边的节点,所以加了一个flag判断一下,
    如果flag=1,说明对于上一层节点,这是左子树,那么返回root最右边的节点,
    如果flag=2,说明对于上一层,这是右子树,那么返回root最左边的节点,
    flag=0,说明到了根节点那里,返回最左边的节点就是链表最开始的节点了。
    ******************************************************************************************
    后来我看了解答,发现好像返回谁都行,因为你返回以后,上一层的root节点接收你返回的节点,如果这是左子树返回的,那么找到最后就是要连接的节点了
    如果是右子树返回的,那么找到最左边的那个,就是root后面要跟着的节点了。
    //还有一些细节比如为空之类的就不提了
     
     
     
     1 /**
     2 public class TreeNode {
     3     int val = 0;
     4     TreeNode left = null;
     5     TreeNode right = null;
     6 
     7     public TreeNode(int val) {
     8         this.val = val;
     9 
    10     }
    11 
    12 }
    13 */
    14 public class Solution {
    15     public TreeNode Convert(TreeNode pRootOfTree) {
    16         if(pRootOfTree==null)
    17             return null;
    18         return helper(pRootOfTree,0);
    19     }
    20     public TreeNode helper(TreeNode root,int flag)
    21     {
    22         if(root==null)
    23             return null;
    24         TreeNode left=helper(root.left,1);
    25         if(left==null)
    26             root.left=left;
    27         else
    28         {
    29             root.left=left;
    30             left.right=root;
    31         }
    32         TreeNode right=helper(root.right,2);
    33         if(right==null)
    34             root.right=right;
    35         else
    36         {
    37             root.right=right;
    38             right.left=root;
    39         }
    40         if(flag==1)
    41         {
    42             TreeNode res=root;
    43             while(res.right!=null)
    44                 res=res.right;
    45             return res;
    46         }
    47         else if(flag==2)
    48         {
    49             TreeNode res=root;
    50             while(res.left!=null)
    51                 res=res.left;
    52             return res;
    53         }
    54         else
    55          {
    56             TreeNode res=root;
    57             while(res.left!=null)
    58                 res=res.left;
    59             return res;
    60         }
    61     }
    62 }
  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11550392.html
Copyright © 2011-2022 走看看