//后续遍历树
void PostfixTraverse(BiTree T){
if(T!=NULL){
PostfixTraverse(T->left);
PostfixTraverse(T->right);
std::cout<<T->key<<" ";
}
}
//前序创建树,输入完后程序运行结束,不需要输入crtl+z结束
void CreateBiTreePrefix(BiTree &T){
int value;
std::cin>>value;
if(value==-1)
T=NULL;
else{
T=(BiTree)malloc(sizeof(BiTreeNode));
T->key=value;
CreateBiTreePrefix(T->left);
CreateBiTreePrefix(T->right);
}
}
//剑指offer 面试题25 求二叉树中和为某一路径的值
//程序运行结束后,currsum=0,path为空
std::vector<int> path;
int currsum=0;
void FindPathSum(BiTree T,int sum){
if(T==NULL)
return;
//访问当前节点,加入路径,路径值
path.push_back(T->key);
currsum+=T->key;
//如果是叶节点,并且路径上结点的值等于输入的值,打印出这条路径
if((T->left==NULL)&&(T->right==NULL)){
if(currsum==sum){
std::cout<<"path :";
std::vector<int>::const_iterator iter=path.begin();
while(iter!=path.end()){
std::cout<<*iter<<" ";
++iter;
}
std::cout<<std::endl;
}
}
//如果不是叶节点,遍历它的子节点
if(T->left){
FindPathSum(T->left,sum);
}
if(T->right){
FindPathSum(T->right,sum);
}
//在返回父节点之前,在路径上删除当前结点,currsum值注意也要减去当前结点的值
currsum-=path.back();
path.pop_back();
}
剑指offer 面试题25 求二叉树中和为某一路径的值
最新推荐文章于 2020-08-06 18:29:42 发布