leetcode -- 257. Binary Tree Paths【遍历次序】

本文介绍了如何解决LeetCode上的257题,即给定一个二叉树,找出所有从根节点到叶子节点的路径。主要解析了使用后序遍历的方法,通过将整数转换为字符串来简化解决方案。
摘要由CSDN通过智能技术生成

题目

Given a binary tree, return all root-to-leaf paths.

For example, given the following binary tree:

   1
 /   \
2     3
 \
  5

All root-to-leaf paths are:

["1->2->5", "1->3"]

题意

给定一个二叉树,返回所有的root 到leaf的路径。(上面有相关示例)


分析及解答

(本质上都是二叉树的遍历,先序(从顶向下拼接)后序(从底向上拼接) 都可

方法1(后续遍历):

	public List<String> binaryTreePaths(TreeNode root) {
		// 通过后续遍历的方式记录。
		List<String> paths = new ArrayList<>();
		if(root == null) return paths;
		
		if(root.left == null && root.right == null){
			paths.add(String.valueOf(root.val));
			return paths;
		}
		
		List<String> left = binaryTreePaths(root.left);
		List<String> right = binaryTreePaths(root.right);
		record(left, paths, root);
		record(right,paths,root);
		return paths;
		
	}
	public void record(List<String> src,List<String> tgt,TreeNode current){
		for(String data:src){
			tgt.add(current.val +"->"+data);
		}
	}

改进(整洁代码):

  • 【int 变字符串】 int + "" (空字符串)
  • 减少不必要的中间变量

public List<String> binaryTreePaths(TreeNode root) {
        
        List<String> paths = new LinkedList<>();

        if(root == null) return paths;
        
        if(root.left == null && root.right == null){
            paths.add(root.val+"");
            return paths;
        }

         for (String path : binaryTreePaths(root.left)) {
             paths.add(root.val + "->" + path);
         }

         for (String path : binaryTreePaths(root.right)) {
             paths.add(root.val + "->" + path);
         }

         return paths;
        
    }

方法2( 先序遍历):

参考:(Accepted Java simple solution in 8 lines

public List<String> binaryTreePaths(TreeNode root) {
    List<String> answer = new ArrayList<String>();
    if (root != null) searchBT(root, "", answer);
    return answer;
}
private void searchBT(TreeNode root, String path, List<String> answer) {
    if (root.left == null && root.right == null) answer.add(path + root.val);
    if (root.left != null) searchBT(root.left, path + root.val + "->", answer);
    if (root.right != null) searchBT(root.right, path + root.val + "->", answer);
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值