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


    1、题目描述

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

    2、代码实现

    package com.baozi.offer;
    
    /**
     * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
     *
     * @author BaoZi
     * @create 2019-07-13-9:01
     */
    public class Offer22 {
        public TreeNode Convert(TreeNode pRootOfTree) {
            if (pRootOfTree == null) {
                return null;
            }
            if (pRootOfTree.left == null && pRootOfTree.right == null) {
                return pRootOfTree;
            }
            // 1.将左子树构造成双链表,并返回链表头节点
            TreeNode left = Convert(pRootOfTree.left);
            TreeNode temp_left = left;
            // 2.定位至左子树双链表最后一个节点
            while (temp_left != null && temp_left.right != null) {
                temp_left = temp_left.right;
            }
            // 3.如果左子树链表不为空的话,将当前root追加到左子树链表
            if (left != null) {
                temp_left.right = pRootOfTree;
                pRootOfTree.left = temp_left;
            }
            // 4.将右子树构造成双链表,并返回链表头节点
            TreeNode right = Convert(pRootOfTree.right);
            // 5.如果右子树链表不为空的话,将该链表追加到root节点之后
            if (right != null) {
                right.left = pRootOfTree;
                pRootOfTree.right = right;
            }
            return left != null ? left : pRootOfTree;
        }
    }
    

      

  • 相关阅读:
    SQL学习
    设计模式学习之简单工厂
    c#读写操作3
    SQL存储过程学习
    c# xml的读写
    SQL存储过程实例
    存储过程分页
    搞双显示器
    转:用药的七种心理误区
    lp提了一个非常让偶非常郁闷的要求……
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/11179389.html
Copyright © 2020-2023  润新知