• 二叉搜索树与双向链表


    题目描述

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
    ///////////////////////////////////////////////////////////////
    下午有点晕晕的,感觉不太好,改了改也算是过了,
    中序遍历,一开始不知道如何判断是该返回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 }
  • 相关阅读:
    怎么强制限制div宽度
    KeyWordHelper关键字提取类(注:使用第三方组件DictSeg.dll)
    XmlToJsonxml对象转换为Json对象类
    Excel模板导出(针对复杂报表的一种解决方式)
    SQL查询xml内容
    ASP.NET中使用jQGrid
    RandomHelper随机数辅助类
    Translater语言翻译类
    Int32.Parse, Convert.ToInt32,Int32.TryParse三者的区别
    CollectionHelper网页采集辅助类
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11550392.html
Copyright © 2020-2023  润新知