LeetCode刷题笔记 114. 二叉树展开为链表

题目描述

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

Sample Code (后序遍历)

class Solution {
	private TreeNode node;
	public void flatten(TreeNode root) {
		if(root == null) return;
		flatten(root.right);
		flatten(root.left);
		root.right = node;
		root.left = null;
		node = root;	
	}
}

Sample Code (递归)

一开始没想明白遇到root.left为null的情况,遇到root.left = null的情况时while(root.right != null)会自动弥补 root.left = null 的坑。

class Solution {
    public void flatten(TreeNode root) {
        if(root == null) return;
        flatten(root.left);
        flatten(root.right);
        TreeNode temp = root.right;
        root.right = root.left;
        root.left = null;
        while(root.right != null) 
            root = root.right;
        root.right = temp;
    }
}

Sample Code (非递归)

直接把左子树链接到右子树去,然后左子树里面的左子树到后面再以一样的道理处理。

class Solution {
    public void flatten(TreeNode root) {
        while(root != null) {
            if(root.left == null) {
                root = root.right;
            }else {
                TreeNode tmp = root.left;
                while(tmp.right != null)
                    tmp = tmp.right;
                tmp.right = root.right;
                
                root.right = root.left;
                root.left = null;                
                
                root = root.right;
            }
        }        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值