Leetcode-Daily:Construct String from Binary Tree && Binary Tree Paths && Path Sum II

  本次,总结三道类似的题目。  

  第一题:606. Construct String from Binary Tree 。

  题目要求:根据一棵二叉树的前序遍历,构建一个回文字符串,具体的要求是:

  • 节点本身为null:返回空字符串""。
  • 左右子树都不存在:返回结点值的字符串形式。
  • 左子树不存在而右子树存在:保留左子树的空括号,即()。
  • 左子树存在而右子树不存在:不保留右子树的空括号。
  • 左右子树均存在:正常处理。

  代码实现:https://github.com/William0423/Leetcode/blob/master/java/src/tree/problem/Construct_String_from_Binary_Tree.java

  过程分析:在递归实现的时候,可使用Stringbuffer或者StringBuilder,但是不能使用String。

  第二题:257. Binary Tree Paths

    题目要求:打印二叉树所有从根节点到最后一个子节点的路径,以List<String>形式的结果返回。

    代码实现:https://github.com/William0423/Leetcode/blob/master/java/src/tree/problem/Binary_Tree_Paths.java

    过程分析:在每一次从根节点到子节点的递归实现中,使用String,而不是Stringbuffer或者StringBuilder,可避免最后结果路径A和路径B的结果混杂在一起。

  第三题:113. Path Sum II

    题目要求:给定一棵树和一个值,返回从根节点到最后一个节点之和等于这个整数的所有可能路径,以List<List<Integer>>形式的结果返回;

    代码实现:https://github.com/William0423/Leetcode/blob/master/java/src/tree/problem/Path_Sum_II.java

    过程分析:这道题目实现类似于第二道题目,但是因为java中没有不可变的List,所有在从根节点到子节点向上递归实现中,需要实现删除List<Integer>元素的代码。

  最后,关于string、stringbuffer和stringbuilder的区别主要在于是否可变、是否线程安全两个方面。

原文地址:https://www.cnblogs.com/openAI/p/8848161.html