将二叉树展开为单向链表(原地操作二叉树)

本文介绍了如何将二叉树展开为单向链表,遵循先序遍历的顺序。作者提供了个人的Java实现,虽然不那么简练,但详细展示了转化过程。该主题来源于LeetCode的第114题。
摘要由CSDN通过智能技术生成

以先序遍历的结点顺序为链表的结点顺序

题目来自Leetcode-----114

以下是我个人的写法,并不像答案那么简练,但构建的过程会更加清晰。(有错误请指出谢谢大家!)

首先我来讲解我的思路,本地操作,故不存在new新结点的行为。
那么如何实现呢?
1.首先确定遍历方式-----先序遍历(dfs)
2.我们以二叉树结点的right作为链表结点的next
3.问题就在于如何在dfs的过程中把链表构建出来:
	1)设置两个临时指针保留当前结点的左右孩子,并将当前结点的左右孩子销毁
				
				TreeNode left = root.left;
				TreeNode right = root.right;
				root.left = null;
				root.right = null;
				
	2)接下来就是构建链表:
			这里我才用结点尾部插入的方式(parent即为最后一个结点)
			parent.right = root ;(这里的root已经经过上述的处理)
	
	3)注意事项:左树构建完毕后,记得把parent(即为代码中的node)更新为当前链表的最后一个元素,
	不然构建出来的就不对了。
lass Solution009 {
   
    public static void main(String[] args) {
   
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.left.right = new TreeNode(<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值