LeetCode Binary Tree Paths

本文介绍了一种使用深度优先遍历算法解决二叉树所有根到叶子节点路径的问题,并提供了一个具体的递归实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

For example ,given the following binary tree:

      1

2           3   这样的一棵树,那么它的从根到叶子节点的路径就是["1 -> 2 -> 5","1 -> 3"]。

    5               

那么这道题其实是考虑到用深度优先遍历算法来完成。首先考虑用递归的思想,这个思想其实很简单,但是有时却又让人有点晕,不过仔细理解一下还是可以学到的。其实每次在迭代递归的时候,最后都返回到刚才开始递归的那个地方,所以其实我们在写代码的时候是不用考虑具体内部是怎么完成的,而只要考虑递归的过程就行了。那么代码就如下:

public class Solution 
{
	List<String> paths = new ArrayList<>();
	
	public List<String> binaryTreePaths(TreeNode root) 
	{  
         if(root==null)  
             return paths;  
         String curPath="";  
         serachTree(root, curPath);  
         return paths;  
    }
	public void serachTree(TreeNode root,String currentPath) 
	{  
         currentPath+=root.val;  
         if(root.left == null && root.right == null)  
         {  
             paths.add(currentPath);  
             //System.out.println(currentPath);  
             return;  
         }  
         currentPath += "->";  
         if(root.left!=null)  
         {
             
             serachTree(root.left, currentPath);  //递归之后都是回退到这句之前的,所以上面那句不能写在这个判断力,否则会导致被添加了两遍
         }
         if(root.right!=null)  
         {
             //currentPath += "->";  
             serachTree(root.right, currentPath);  
         }
    } 
}

上述代码中的//部分说明了递归的这个问题,当一次递归结束时候,都是返回到原来开始递归的位置。所以,针对此题,我的currentPath += "->"必须要写在外面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值