114二叉树展开为链表Flatten Binary Tree To LinkedList

    刚好头条笔试的时候问到了,记录一下答案。二叉树的题一般用递归的思想做,递归中注意两点:

1、注意返回的边界条件

2、注意模块化的思想,从局部都一点入手处理,然后对把处理逻辑当做完成的部分来处理,不要越陷越深

    回到题目,这道题目的思路是把给定的二叉树按照先序遍历的顺序转换成链表,二叉树的每个节点right指向下一个节点。对某一个节点进行处理,然后递归处理左节点、右节点,之后当做处理完成,即左节点全部变成了转化好的链表,右节点也全部完成转化。把左子树的链表的最后一个节点指向有子树即可。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public void flatten(TreeNode root) {
        if (root == null) {
			return;
		}

		if (root.left != null) {
			flatten(root.left);
		}

		if (root.right != null) {
			flatten(root.right);
		}

		TreeNode temp = root.right;
		root.right = root.left; // 右节点赋值为昨节点
		root.left = null;
		// 走到左边的左后一个节点,然后与右节点相连,注意判断条件是root.right
		while (root.right != null) {
			root = root.right;
		}
		root.right = temp;
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值