您的位置:首页 > 其它

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

2014-06-08 21:49 211 查看
在二元树中找出和为某一值的所有路径

题目:输入一个整数和一棵二元树。

从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。

打印出和与输入整数相等的所有路径。

例如输入整数22 和如下二元树

10

/ \

5 12

/ \

4 7

则打印出两条路径:10, 12 和10, 5, 7。

#include <iostream>
#include <vector>

using namespace std;

class CTreeNode
{
public:
int m_data;
CTreeNode *m_pleft;
CTreeNode *m_pright;
CTreeNode(int data=0, CTreeNode *left=NULL, CTreeNode *right=NULL):m_data(data),m_pleft(left),m_pright(right){}
};

CTreeNode *Create()  //创建二叉树
{
CTreeNode *pNode1 = new CTreeNode(4);   //new
CTreeNode *pNode2 = new CTreeNode(7);
CTreeNode *pNode3 = new CTreeNode(5, pNode1, pNode2);
CTreeNode *pNode4 = new CTreeNode(12);
CTreeNode *pNode5 = new CTreeNode(10, pNode3, pNode4);
return pNode5;
}

void Search(CTreeNode *Root, int sum, int path[],int count)
{
path[count++] = Root->m_data;  //从根开始记录路径和点之和
sum -= Root->m_data;
if(Root->m_pleft==NULL && Root->m_pright==NULL)
{
if(sum == 0)
{
int i=0;
for(i=0;i<count;i++)
cout<<path[i]<<endl;
}
return;
}
else
{
Search(Root->m_pleft, sum, path, count);
Search(Root->m_pright, sum, path, count);
}
count--;                       //回溯!!!!!!!!!
sum += Root->m_data;
}

int main()
{
CTreeNode *pRoot = Create();
int path[10];
int sum=22;
int count=0;
Search(pRoot, sum, path, count);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: