二叉树展开为链表

13 篇文章 0 订阅

题目描述:

给定一个二叉树,原地将它展开为链表。

样例:

给定一棵二叉树如下:
在这里插入图片描述
将其展开为:
在这里插入图片描述

分析:

如果节点为空或者节点的左右孩子节点均为空则直接返回
若左右孩子节点均存在,则分别对节点的左右子树操作。首先将其左子树转换成链表,然后将其右子树转换成链表;将该节点的右子树保存到副本中,将左子树赋给右指针,遍历当前结点右孩子节点的右子树,直到为空,将最后一个节点的右指针指向原来保存的副本节点,即当前根节点原来的右孩子节点。
如果根节点的右孩子节点为空左孩子节点不空,则直接将右指针指向左孩子节点,将左指针置为空,然后对右子树变换;
如果根节点的左孩子节点为空右孩子节点不空,则直接对右孩子节点转换即可。

//执行用时 : 2 ms, 在Flatten Binary Tree to Linked List的Java提交中击败了97.06% 的用户
//内存消耗 : 34.8 MB, 在Flatten Binary Tree to Linked List的Java提交中击败了91.79% 的用户
	public void flatten(TreeNode root) {
		if(root==null)
			return;
		if(root.left==null&&root.right==null)
			return;
		if(root.left!=null&&root.right!=null) {
			flatten(root.left);
			flatten(root.right);
			TreeNode tmp=root.right;
			root.right=root.left;
			root.left=null;
			TreeNode p=root.right;
			while(p.right!=null)
				p=p.right;
			p.right=tmp;
			return;
		}
		if(root.left==null&&root.right!=null) {
			flatten(root.right);
			return;
		}
		if(root.left!=null&&root.right==null) {
			root.right=root.left;
			root.left=null;
			flatten(root.right);
			return;
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值