#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
struct BinaryTreeNode
{
int data;
BinaryTreeNode * leftchild;
BinaryTreeNode * rightchild;
BinaryTreeNode(){}
};
void CreateBinaryTree(BinaryTreeNode ** root)
{
*root=new BinaryTreeNode();
printf("input the data\n");
int data;
scanf("%d",&data);
if(data==-1)
{
*root=NULL;
return ;
}
else
(*root)->data=data;
printf("Create left child of Node %d\n",(*root)->data);
CreateBinaryTree(&(*root)->leftchild);
printf("Create right child of Node %d\n",(*root)->data);
CreateBinaryTree(&(*root)->rightchild);
}
void Preorder(BinaryTreeNode * root)
{
if(root==NULL) return ;
printf("%d ",root->data);
Preorder(root->leftchild);
Preorder(root->rightchild);
}
void FindPath(BinaryTreeNode * root,int expectedsum,vector<int> & path,int cur)
{
cur+=root->data;
path.push_back(root->data);
bool isleaf= root->leftchild==NULL && root->rightchild ==NULL;
if(cur==expectedsum && isleaf)//只有到叶节点才算一条路径
{
printf("Find a path ");
for(int i=0;i<path.size();++i)
printf("%d ",path[i]);
printf("\n");
}
if(root->leftchild!=NULL)
FindPath(root->leftchild,expectedsum,path,cur);
if(root->rightchild!=NULL)
FindPath(root->rightchild,expectedsum,path,cur);
path.pop_back();//最后把这个节点 弹出去
}
void FindPath(BinaryTreeNode * root,int expectedsum)
{
if(root==NULL) return ;
vector<int> path;
int cur=0;
FindPath(root,expectedsum,path,cur);
}
int main()
{
freopen("/home/gl/in","r",stdin);
BinaryTreeNode * root=NULL;
CreateBinaryTree(&root);
FindPath(root,22);
return 0;
}
剑指offer面试题25二叉树中和为某一个固定值的路径
最新推荐文章于 2022-05-13 11:04:59 发布