zoukankan      html  css  js  c++  java
  • 剑指offer二十六之二叉搜索树与双向链表

    一、题目

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

    二、思路

          对二叉搜索树中序遍历的结果即为排序的结果,在中序遍历的过程中,建立双向指针。详细过程见代码注释。

    三、代码

    public class Solution {
    
        TreeNode tempHead = null; //
        TreeNode realHead = null; //保存双向链表的头结点
    
        public TreeNode Convert(TreeNode pRootOfTree) {
            //如果头结点为空,返回null
            if (pRootOfTree == null) {
                return null;
            }
    
            //转换
            ConvertMethod(pRootOfTree);
    
            //返回双向链表的头结点
            return realHead;
        }
    
        //采用递归的方法进行中序遍历,遍历过程中,建立头结点和下一个节点的双向指针
        public void ConvertMethod(TreeNode pRootOfTree) {
            //递归遍历左节点
            if (pRootOfTree.left != null) {
                ConvertMethod(pRootOfTree.left);
            }
    
            //建立根节点与下一个节点的双向指针
            if(tempHead==null){    //第一次运行的时候,头结点为空,初始化头结点
                tempHead=pRootOfTree;//用于记录当前头结点
                realHead=pRootOfTree;//用于记录双向链表的头结点
            }else {  //第一次运行以后,建立tempHead节点与其下一个节点的双向指针
               //建立当前头结点与下一个节点的双向指针
                tempHead.right = pRootOfTree;
                pRootOfTree.left = tempHead;
    
                tempHead = pRootOfTree; //当前头节点后移一位
            }
    
            //递归遍历右节点
            if (pRootOfTree.right != null) {
                ConvertMethod(pRootOfTree.right);
            }
    
        }
    }
    View Code
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    View Code

    ------------------------------------------------------

    参考链接:https://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5

  • 相关阅读:
    Python3之命令行参数处理
    基于 Laradock 环境 Project 的总结
    Typora功能新发现-自动复制图片到指定目录下
    ubuntu 18.04 设置静态ip方法
    vscode 同时编辑多处,多个光标 快捷键
    nginx和ftp搭建图片服务器
    Centos 6.5出现yum安装慢的情况
    Linux中的CentOS 6克隆之后修改
    springMVC-文件上传CommonsMultipartFile
    Spring和mybatis整合 org.mybatis.spring.mapper.MapperScannerConfigurer
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7650067.html
Copyright © 2011-2022 走看看