剑指offer二十七之二叉搜索树与双向链表

Posted AI菌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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

以上是关于剑指offer二十七之二叉搜索树与双向链表的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer之二叉搜索树与双向链表

剑指offer之二叉搜索树与双向链表

二叉搜索树与双向链表-剑指Offer

Java 剑指offer(36) 二叉搜索树与双向链表

剑指 Offer 36. 二叉搜索树与双向链表

剑指Offer-二叉搜索树与双向链表