【2】在二叉树中找出和为某一值的所有路径

/*******************************************************************

 100-4.题目:在二元树中找出和为某一值的所有路径

输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。例如输入整数22 和二元树则打印出两条路径:10, 12 和10, 5, 7。

\*******************************************************************

#include <iostream>
#include <vector>
using namespace std;

typedef struct BTreeNode{
    int data;
	BTreeNode *left;
	BTreeNode *right;
}BTreeNode,*BTree;

void add_btreenode(BTreeNode *&a_tree,int value){
    if(a_tree == NULL){
        a_tree = new BTreeNode();
        a_tree->data = value;
        a_tree->left = NULL;
        a_tree->right = NULL;
        cout<<a_tree->data<<endl;
    }else if(value < a_tree->data){
        add_btreenode(a_tree->left,value);
    }else if(value > a_tree->data){
        add_btreenode(a_tree->right,value);
    }

}
void preorder_btree(BTreeNode *a_tree,vector<int> v,int sum,int given){
    if(a_tree != NULL){
        sum += a_tree->data;
        v.push_back(a_tree->data);
        cout<<"sum:"<<sum<<':'<<a_tree->data<<' ';
        if(a_tree->right == NULL && a_tree->left == NULL){
            if(sum == given){
                for (vector<int>::iterator iter=v.begin();iter!=v.end();iter++){
                    cout<<*iter<<" ";
                    
                }
                cout<<endl;
            }
        }
        cout<<"l";
        preorder_btree(a_tree->left,v,sum,given);
        cout<<"r";
        preorder_btree(a_tree->right,v,sum,given);
        v.pop_back();
        sum -= a_tree->data;
    }
    
}
int main(){
    int a[] ={4,3,5,2,9};
    BTreeNode *a_tree=NULL;
    for(int i=0;i<5;i++){
        cout<<a[i]<<':';
        add_btreenode(a_tree,a[i]);
        
    }
    cout<<"######"<<endl;
    
    vector<int> v;
    int given=9;
    int sum=0;
    preorder_btree(a_tree,v,sum,given);
    
    return 0;
}

 

指针:

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

#include <iostream>
using namespace std;

int main(){
	int *p;
	int a = 10;
	p = &a;
    
	cout<<"a:"<<a<<endl;   //a:10
	cout<<"p:"<<p<<endl;   //p:0x7fff5b42fb2c
	cout<<"*p:"<<*p<<endl; //*p:10
    return 0;
}

 

转载于:https://my.oschina.net/u/347414/blog/724398

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值