LeetCode257题:二叉树的所有路径

版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/ASN_forever/article/details/84965240

思路: 

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

递归实现,如果当前节点不为空就将其值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());
            }
    }

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

猜你喜欢

转载自blog.csdn.net/ASN_forever/article/details/84965240
今日推荐