读书人

二元树中找到和为某一值的所有路径

发布时间: 2012-09-23 10:28:11 作者: rapoo

二元树中找出和为某一值的所有路径

在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树  10     / \     5 12     / \     4 7则打印出两条路径:10, 12和10, 5, 7。// MatrixMaxValue.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>using namespace std;class Node{public:int data;Node *left;Node *right;Node(int d = 0, Node *lr = 0, Node *rr = 0):data(d), left(lr), right(rr){}};Node *create(){Node *root;Node *p4 = new Node(4);Node *p7 = new Node(7);Node *p5 = new Node(5,p4,p7);Node *p12 = new Node(12);Node *p10 = new Node(10, p5, p12);root = p10;return root;}int SumBTree(Node* node,int sum,int Total){int m,n;sum+=node->data;if (sum>Total){return -1;}if (!node->left&&!node->right) //寻找叶子节点{if (sum==Total){printf("%d\n",node->data);return 1;}else{return -1;}}if (node->left){m = SumBTree(node->left,sum,Total);}if (m==1){printf("%d\n",node->data);}if (node->right){n = SumBTree(node->right,sum,Total);}if (n==1){printf("%d\n",node->data);}if (m==1||n==1){return 1;}else{return -1;}}int main(int argc, char* argv[]){Node *root = create();Node *ptr = NULL;SumBTree(root,0,22);return 0;}

读书人网 >编程

热点推荐