LeetCode257题:二叉树的所有路径

思路: 

关键点是路径的定义,即根结点到叶子节点。而判断是否为叶子节点只需要判断其左右子结点是否都为空即可。

递归实现,如果当前节点不为空就将其值val加入到stringbuffer中,并在此条件下判断它是否为叶子节点(即左右子节点都为空),如果是则将stringbuffer添加到list中,否则,如果有左子节点,则递归到左子节点,如果有右子节点,则递归到右子节点。需要注意的是,递归的时候,要添加“->”字符串,并且每个递归结束后,要删除最后的“->val”以还原到以前的状态。

public List<String> binaryTreePaths(TreeNode root) {
        List<String> list = new ArrayList<String>();
    	if(root == null)
            return list;
        StringBuffer sb = new StringBuffer();
        fun(root,sb,list);
        return list;
    }
    public void fun(TreeNode root,StringBuffer sb,List<String> list){
            sb.append(root.val);
            if(root.left == null && root.right == null){
                list.add(sb.toString());//此节点为叶子节点,将路径添加到list中后返回
                return;
            }
            if(root.left != null){
            	sb.append("->");
            	fun(root.left,sb,list);
                sb.delete(sb.lastIndexOf(">")-1, sb.length());//删除最后的节点及其之前的“->”以还原到递归之前的状态	
            }
            if(root.right != null){
                sb.append("->");
            	fun(root.right,sb,list);
            	sb.delete(sb.lastIndexOf(">")-1, sb.length());
            }
    }

这道题本来并不难,但要求输出的路径中需要包含“->”,这样在删除的时候就多了一点需要考虑的情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值