题目:
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路:
由于要打印路径,且路径总是以根节点开头。因此我们想到前序遍历。之后由于需要对所有路径进行遍历,且存在返回上一节点的情况,想到使用回溯法。考虑回溯条件,当两种情况需要回溯:1.当前节点为空2:当前节点的左右子节点都已经遍历过。以下为代码实现:
TreeNode定义:
public class TreeNode {
int val;
TreeNode leftchild=null;
TreeNode rightchild=null;
public TreeNode(int val){
this.val = val;
}
}
import java.util.ArrayList;
public class MS34 {
public static void findpath(TreeNode root,int num){
if(root==null)
return;
ArrayList<TreeNode> arrayList = new ArrayList<>();
printpaht(root,arrayList, num);
}
public static boolean printpaht(TreeNode root,ArrayList<TreeNode> arrayList,int num){
if (root==null)
return true;
arrayList.add(root);
int sum = 0;
for (int i = 0; i <arrayList.size() ; i++) {
sum+= arrayList.get(i).val;
}
if (sum==num) {
for (int i = 0; i < arrayList.size(); i++) {
System.out.print(arrayList.get(i).val + " ");
}
System.out.println("");
}
boolean ToTheEnd = false;
boolean leftIsEnd = false;
boolean rightIsEnd = false;
leftIsEnd = printpaht(root.leftchild, arrayList, num);
rightIsEnd = printpaht(root.rightchild, arrayList, num);
//如果左右孩子都返回true,那本节点也返回true
if (leftIsEnd&&rightIsEnd){
arrayList.remove(arrayList.size()-1);
ToTheEnd = true;
}
return ToTheEnd;
}
}
本文介绍了一种算法,用于寻找二叉树中所有节点值之和等于特定整数的路径。通过前序遍历和回溯法,该算法能够有效地处理这一问题,实现了从根节点到叶节点路径的打印。
1568

被折叠的 条评论
为什么被折叠?



