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

  • 相关阅读:
    windows系统下的快捷指令
    Centos系统下搭建Smokeping 方法
    Niutrans 机器翻译系统的搭建
    国内常见语料库
    mysqldump 备份导出数据排除某张表或多张表
    删除mysql中user为空用户,mysql空密码
    nginx代理yum
    提高CPU使用率
    ubantu crontab e 无法编辑保存退出的问题
    Linux 使用NC命令永久监听本地端口
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7650067.html
Copyright © 2011-2022 走看看