4 题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ /
5 12
/ \
4 7
则打印出两条路径:10, 12和10, 5, 7。
#include <iostream>
using namespace std;
struct BSTreeNode {
int value;
BSTreeNode * left;
BSTreeNode * right;
};
struct Stack {
int data[100];
int top;
};
void addNode(BSTreeNode * & root ,int value) {
if(root==NULL) {
BSTreeNode * p = new BSTreeNode;
p->value = value;
p->right = NULL;
p->left = NULL;
root = p;
}
if(value > root->value) {
addNode(root->right,value);
}
if(value< root->value) {
addNode(root->left,value);
}
}
void allPath(BSTreeNode * root ,int n,Stack ss) {
int m;
m = n-(root->value);
ss.data[ss.top] = root->value;
ss.top++;
if((n==root->value) && (root->left==NULL) && (root->right==NULL)){
cout<<root->value<<endl;
for(int j=0;j<ss.top;j++) {
cout<<ss.data[j]<<" ";
}
cout<<endl;
}
else {
Stack s;
s.top = ss.top;
for(int i=0; i<ss.top;i++) {
s.data[i] = ss.data[i];
}
if(root->left != NULL) {
allPath(root->left,m,s);
}
if(root->right != NULL) {
allPath(root->right,m,s);
}
}
}
int main() {
BSTreeNode * root = NULL;
Stack ss;
ss.top = 0;
addNode(root,10);
addNode(root,6);
addNode(root,11);
addNode(root,12);
addNode(root,4);
addNode(root,9);
addNode(root,8);
allPath(root,33,ss);
}
本文介绍了一种算法,该算法能够在给定的二叉树中找到所有节点值之和等于特定整数的路径。通过递归地遍历树并使用栈来记录路径上的节点值,实现了这一功能。
937

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



