/*
* File: 打印二叉树指定值的所有路径.cpp
* Author: hongbin
*
*/
#include <cstdlib>
#include <iostream>
using namespace std;
/*
*
*/
typedef struct treenode {
int value;
struct treenode* left;
struct treenode* right;
treenode(int data=0){
value=data;
left=right=NULL;
}
} Treenode;
Treenode* CreateTree(void){
Treenode* root=new Treenode(2);
Treenode* ptr=new Treenode(3);
root->left=ptr;
ptr=new Treenode(4);
root->right=ptr;
ptr=new Treenode(5);
root->left->left=ptr;
ptr=new Treenode(6);
root->left->right=ptr;
ptr=new Treenode(7);
root->right->left=ptr;
ptr=new Treenode(8);
root->right->right=ptr;
ptr=new Treenode(9);
root->left->left->left=ptr;
ptr=new Treenode(10);
root->left->left->right=ptr;
return root;
}
int GetDepth(Treenode* root){
if(NULL==root)
return 0;
int leftdepth,rightdepeth,finaldepth;
leftdepth=GetDepth(root->left);
rightdepeth=GetDepth(root->right);
finaldepth=leftdepth>rightdepeth? (leftdepth+1):(rightdepeth+1);
return finaldepth;
}
void PrintNodeList(int *node_array,int start, int end){
if(NULL==node_array)
return;
cout<<"matched node list: "<<endl;
for(int index=start; index<=end; index++){
cout<<" "<<node_array[index];
}
cout<<""<<endl;
}
// level = the depth's th of the tree
// node_array saves the node list from root to this current_node
//sum = value of the given sum
void FindSum(Treenode* current_node, int sum, int node_array[], int level){
if(NULL==current_node)
return;
node_array[level]=current_node->value;
int tempvalue=0;
for(int i=level;i>=0;i--) {
tempvalue+=node_array[i];
if(tempvalue==sum) {
cout<<"find match value="<<tempvalue<<endl;
//print matched nodes list.
PrintNodeList(node_array,i,level);
}
}
FindSum(current_node->left,sum,node_array,level+1);
FindSum(current_node->right,sum,node_array,level+1);
//shall make node_array[level] invalid
return;
}
void FindSum(Treenode* root, int sum ){
if(NULL==root)
return;
int depth=GetDepth(root);
int *node_array=new int[depth];
cout<<"tree depth="<<depth<<endl;
FindSum(root,sum,node_array,0);
}
int main(int argc, char** argv){
int sum=0;
Treenode* head=CreateTree();
cout<<"input value=";
cin>>sum;
FindSum(head,sum);
return 0;
}
* File: 打印二叉树指定值的所有路径.cpp
* Author: hongbin
*
*/
#include <cstdlib>
#include <iostream>
using namespace std;
/*
*
*/
typedef struct treenode {
int value;
struct treenode* left;
struct treenode* right;
treenode(int data=0){
value=data;
left=right=NULL;
}
} Treenode;
Treenode* CreateTree(void){
Treenode* root=new Treenode(2);
Treenode* ptr=new Treenode(3);
root->left=ptr;
ptr=new Treenode(4);
root->right=ptr;
ptr=new Treenode(5);
root->left->left=ptr;
ptr=new Treenode(6);
root->left->right=ptr;
ptr=new Treenode(7);
root->right->left=ptr;
ptr=new Treenode(8);
root->right->right=ptr;
ptr=new Treenode(9);
root->left->left->left=ptr;
ptr=new Treenode(10);
root->left->left->right=ptr;
return root;
}
int GetDepth(Treenode* root){
if(NULL==root)
return 0;
int leftdepth,rightdepeth,finaldepth;
leftdepth=GetDepth(root->left);
rightdepeth=GetDepth(root->right);
finaldepth=leftdepth>rightdepeth? (leftdepth+1):(rightdepeth+1);
return finaldepth;
}
void PrintNodeList(int *node_array,int start, int end){
if(NULL==node_array)
return;
cout<<"matched node list: "<<endl;
for(int index=start; index<=end; index++){
cout<<" "<<node_array[index];
}
cout<<""<<endl;
}
// level = the depth's th of the tree
// node_array saves the node list from root to this current_node
//sum = value of the given sum
void FindSum(Treenode* current_node, int sum, int node_array[], int level){
if(NULL==current_node)
return;
node_array[level]=current_node->value;
int tempvalue=0;
for(int i=level;i>=0;i--) {
tempvalue+=node_array[i];
if(tempvalue==sum) {
cout<<"find match value="<<tempvalue<<endl;
//print matched nodes list.
PrintNodeList(node_array,i,level);
}
}
FindSum(current_node->left,sum,node_array,level+1);
FindSum(current_node->right,sum,node_array,level+1);
//shall make node_array[level] invalid
return;
}
void FindSum(Treenode* root, int sum ){
if(NULL==root)
return;
int depth=GetDepth(root);
int *node_array=new int[depth];
cout<<"tree depth="<<depth<<endl;
FindSum(root,sum,node_array,0);
}
int main(int argc, char** argv){
int sum=0;
Treenode* head=CreateTree();
cout<<"input value=";
cin>>sum;
FindSum(head,sum);
return 0;
}