博客
关于我
剑指offer(牛客)---26.二叉搜索树与双向链表
阅读量:717 次
发布时间:2019-03-17

本文共 1170 字,大约阅读时间需要 3 分钟。

题目描述一棵二叉搜索树,将其转换为一个排序的双向链表。要求不能创建新结点,只能调整树中结点指针的指向。

牛客推荐代码如下:

public class Solution {    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 p = left;        // 2. 定位至左子树双链表最后一个节点        while (p != null && p.right != null) {            p = p.right;        }        // 3. 如果左子树链表不为空,当前root追加到左子树链表        if (left != null) {            p.right = pRootOfTree;            pRootOfTree.left = p;        }        // 4. 将右子树构造成双链表,并返回链表头节点        TreeNode right = Convert(pRootOfTree.right);        // 5. 如果右子树链表不为空,将该链表追加到root节点之后        if (right != null) {            right.left = pRootOfTree;            pRootOfTree.right = right;        }        return left != null ? left : pRootOfTree;    }}

解题思路:假设有如下二叉搜索树:

6      /   \    5      7   / \     / \  3   8   14  25

第一次递归处理左子树,构建成双链表并返回链表头节点。然后定位到左子树最后一个节点,并将当前节点6追加到左子树链表中。接着递归处理右子树,同样将右子树构造成双链表并返回头节点,最后将该链表追加到节点6之后。

递归过程继续处理节点12的左子树,同样按照链表性质将节点12连接到链表末尾。这一过程类似于顺序遍历二叉树,但借助递归实现,巧妙地将树结构转换为链表形式。

转载地址:http://oubhz.baihongyu.com/

你可能感兴趣的文章
pandas 找到局部最大值和最小值
查看>>
Pandas 按年份分组,按销售列排名,在具有重复数据的数据框中
查看>>
pandas 按日期和年份分组,并汇总金额
查看>>
pandas 数据帧到PostgreSQL表中使用的是没有SQLAlChemy的心理复制2吗?
查看>>
pandas 数据帧多行查询
查看>>
Pandas 数据框:使用线性插值重新采样
查看>>
pandas 数据框将 INT64 列转换为布尔值
查看>>
pandas 数据框将列类型转换为字符串或分类
查看>>
pandas 数据框条件 .mean() 取决于特定列中的值
查看>>
pandas 数据框至海运分组条形图
查看>>
Pandas 数据透视表:列顺序和小计
查看>>
pandas 时序统计的高级用法!
查看>>
pandas 时间序列重新采样结束给定的一天
查看>>
pandas 根据不是常量的第三列的值将值从一列复制到另一列
查看>>
pandas 根据值从多列中的一列查找
查看>>
Pandas 根据布尔条件选择行和列
查看>>
pandas 滚动窗口 - datetime64[ns] 未实现
查看>>
pandas 版本兼容特定的蟒蛇和NumPy配置吗?
查看>>
pandas 生成excel多级表头
查看>>
Pandas 的 DataFrame 详解-ChatGPT4o作答
查看>>