二叉树展开为链表
发布日期:2021-05-04 13:50:02 浏览次数:21 分类:技术文章

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

二叉树展开为链表

给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。

展开后的单链表应该与二叉树 先序遍历 顺序相同。

在这里插入图片描述

输入:root = [1,2,5,3,4,null,6]

输出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [0]
输出:[0]

提示:

树中结点数在范围 [0, 2000] 内
-100 <= Node.val <= 100

思路:因为要把树转化为链表,所以他的左右节点要相连,他的左节点置为null,右节点指向左节点,然后再把之前的右节点连在当前树的最右端

例如示例1,节点2,

步骤一,将2指向的左节点置为null,右节点指向左节点,此时如下

2	 /	 \   null   3

步骤二,找到当前节点的最右端,然后指向之前的右节点

2     / \null    3		  \		    4

局部展开就完成了,然后递归实现即可

class Solution {       public void flatten(TreeNode root) {           if(root == null) return;        flatten(root.left);        flatten(root.right);        /***后序遍历***/        TreeNode left = root.left;        TreeNode right = root.right;        //先把左子树置为null,右子树指向左节点        root.left = null;        root.right = left;        //找到当前节点右子树的末端,把之前的右子树接上        TreeNode p = root;        while(p.right != null) p = p.right;        p.right = right;    }}

在这里插入图片描述

上一篇:最大二叉树
下一篇:网络相关面试题

发表评论

最新留言

不错!
[***.144.177.141]2025年03月26日 03时19分21秒