#include <iostream> using namespace std; struct Stack{ int base[ 100 ]; int *top; }; struct BTNode{ int value; struct BTNode *left; struct BTNode *right; }; void addNode( BTNode *&T , int v ) { if( NULL == T ) { //养成这样写判断语句的好习惯 BTNode * t_node; if( NULL == ( t_node = ( BTNode * ) malloc( sizeof( BTNode ) ) ) ){ printf( "error\n" ); return; } t_node -> value = v; t_node -> left = NULL; t_node -> right = NULL; T = t_node; } else if( T -> value > v ) { addNode( T -> left , v ); } else if( T -> value < v ) { addNode( T -> right , v ); } } void get_route_with_ref( struct BTNode * T , Stack &stack , int cur , const int s ){ if( T != NULL ) { * stack.top = T -> value; stack.top ++; cur = cur + T -> value; if( cur == s ) { int *p = stack.base; while( p != stack.top ) { cout << *p <<" "; p ++; } cout << endl; } else if( cur < s ) { get_route_with_ref( T -> left , stack , cur , s ); get_route_with_ref( T -> right , stack , cur , s ); } stack.top --; } } int main() { struct Stack stack; struct BTNode *T = NULL; int s; addNode( T , 10 ); addNode( T , 5 ); addNode( T , 12 ); addNode( T , 4 ); addNode( T , 7 ); stack.top = stack.base; scanf( "%d" , & s ); get_route_with_ref( T , stack , 0 , s ); return 1; } //下面的代码跟上面几乎没有差别,只是cur传了个引用 #include<stdio.h> #include<stdlib.h> struct Stack{ int base[ 100 ]; int *top; }; struct BTNode{ int value; struct BTNode *left; struct BTNode *right; }; int get_route( BTNode * T , Stack &stack , int s , int &cur ){ *( stack.top ++ ) = T -> value; cur += T -> value; if( ( T -> left == NULL ) && ( T -> right == NULL) ){ if( cur == s ) { int *p = stack.base; while( p != stack.top ) { printf( "%d -> " , *p++ ); } printf( "\n" ); } } if( T -> left ){ get_route( T -> left , stack , s , cur ); stack.top --; cur -= T -> left -> value; //注意,这里是要减的 } if( T -> right ){ get_route( T -> right , stack , s , cur ); stack.top --; cur -= T -> right -> value; } return 1; } void addNode( BTNode *&T , int v ) { if( NULL == T ) { //养成这样写判断语句的好习惯 BTNode * t_node; if( NULL == ( t_node = ( BTNode * ) malloc( sizeof( BTNode ) ) ) ){ printf( "error\n" ); return; } t_node -> value = v; t_node -> left = NULL; t_node -> right = NULL; T = t_node; } else if( T -> value > v ) { addNode( T -> left , v ); } else if( T -> value < v ) { addNode( T -> right , v ); } } int main() { struct Stack stack; struct BTNode *T = NULL; int s; int t = 0; addNode( T , 10 ); addNode( T , 5 ); addNode( T , 12 ); addNode( T , 4 ); addNode( T , 7 ); stack.top = stack.base; scanf( "%d" , & s ); get_route( T , stack , s , t );//如果传引用,这个t不能换成0,因为引用必须指向一个对象 return 1; }
在二元树中找出和为某一值的所有路径
最新推荐文章于 2017-09-04 10:13:34 发布