博客
关于我
剑指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/

你可能感兴趣的文章
Powershell管理系列(四)Lync server 2013 批量启用语音及分配分机号
查看>>
PowerShell脚本运行完 不要马上关闭用什么命令可以停留窗口窗口
查看>>
PowerShell远程连接到Windows
查看>>
power(8) identity
查看>>
POW的重力之美
查看>>
PO、VO、DAO、BO、DTO、POJO能分清吗?
查看>>
pytorch介绍-ChatGPT4o作答
查看>>
PP-PLL:基于概率传播的部分标签学习
查看>>
pytorch介绍
查看>>
pprint 排序字典但不是集合?
查看>>
pptp拨号上网
查看>>
ppt上的倒计时小工具_PPT中有哪些「看似很 LOW,实则惊艳」的小工具
查看>>
PPT添加视频的路径问题
查看>>
PPT美化插件 islide 安装过程问题“加载com加载项时运行出现错误”
查看>>
Prefix Tuning:详细解读Optimizing Continuous Prompts for Generation
查看>>
PreparedStatement 与Statement 的区别,以及为什么推荐使用 PreparedStatement ?
查看>>
PreparedStatement 查询 In 语句 setArray 等介绍。
查看>>
presentModalViewController显示半透明的一个view
查看>>
PresentViewController切换界面
查看>>
PyTorch之torch.utils.data.DataLoader解读
查看>>