zoukankan      html  css  js  c++  java
  • 剑指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;
        }
    }
    

      

  • 相关阅读:
    用户调查报告
    beta-2阶段组员贡献分分配
    beta阶段140字评论
    11月9号站立会议
    BETA预发布演示视频
    第八周PSP&进度条
    11月8号站立会议
    栈——C语言模拟
    读《弗洛伊德:作家与白日梦》
    《爱的艺术》爱的误解——对象,状态
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/11179389.html
Copyright © 2011-2022 走看看