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

    题目描述

    输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
     
     
    这道题我本身的思路也是递归,但是整个过程没有用到返回值,不知道为什么我总是不太会用返回值.......。  具体过程   main函数的作用是 找到当前参数节点的左子树的 最大值(他左子树上面一直找右节点),和参数节点进行连接,右侧一样找到有字数上最小的,和参数节点连接,同时将 当前参数节点的左右子树都放进 main()函数中执行,可是不知道为什么总是显示超时。。。。
     
    于是借鉴了别人的思路,这个思路很巧妙, 定义一个函数main,他的作用是在左右子树反别返回了各自的成型的链表结构的头结点时,和当前根节点组合出一个新的链表 ,返回新的链表的头结点,返回给他的父级函数使用
    代码如下,,,我有一种感觉,代码开始看不懂,多背背 背过之后就能看懂了............
     
    /**
    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;
            if(p!=null){
                while(p.right!=null){
                    p=p.right;
            }
                p.right=pRootOfTree;
                pRootOfTree.left=p;
            }
    
            TreeNode right=Convert(pRootOfTree.right);
            if(right!=null){
                right.left=pRootOfTree;
                pRootOfTree.right=right;
            }
            
            return left==null?pRootOfTree:left;
        }
    
        
    }
  • 相关阅读:
    bzoj4555
    bzoj4516
    树莓派/Debian 挂载硬盘
    树莓派/Debian Apache2 安装腾讯云 SSL 证书
    2019-2020-2《网络对抗技术》 Exp2 后门原理与实践
    kali 开启 SSH 服务
    Docker 入门 7 构建镜像
    Docker 入门 6 获取、加速镜像.md
    Docker 入门 5 数据管理
    Docker 入门 4 容器端口映射 和 Nginx 演示部署
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5904794.html
Copyright © 2011-2022 走看看