输出所有二叉树的路径

MySQL源码分析
yzs87
#include <stdio.h>
#include <malloc.h>
//二叉树节点
struct binary 
{
int data;
struct binary *left;
struct binary *right;
};
//栈
typedef struct stack
{
struct binary *tree;
struct stack *next;
int count;
} linknode;


//入栈
linknode *push(linknode *top,struct binary *root)//若传进*top参数,而没有返回top的话,函数体内的top的作用域是局部的,退出函数,top还是原来的top;若**top这样就可以                                                                                          了,地址内的内容变了
{
linknode *p;
p=(linknode *)malloc(sizeof(linknode));
p->tree=root;
p->next=top;
top->count=top->count+1;
top=p;
    return top;
}
//出栈
linknode *pop(linknode *top)
{
    if(top->next!=NULL)
{
   top=top->next;
   top->count=top->count-1;
}
else
top->count=top->count-1;
return top;


}
void print(linknode *top)
{
if(top->next!=NULL)
{
   print(top->next);
}
printf("%d ",top->tree->data);
}
struct binary *creatTree()
{
int i;
binary *root;
printf("construct binary tree:\n");
scanf("%d",&i);
if(i==0)
return NULL;
root=(binary *)malloc(sizeof(binary));
root->data=i;
root->left=creatTree();
root->right=creatTree();
return root;
}
void main()
{
    struct binary *root;
struct stack *s;
linknode *top;
root=creatTree();
s=(stack *)malloc(sizeof(stack));
top=s;
top->count=1;
top->next=NULL;
top->tree=root;
  //  printf("%d\n",top->count);
while(top->count!=0)
{

if(root->left!=NULL)
{
top=push(top,root->left);
   root=root->left;
}
else 
{/*
print(top);
   pop(top);
root=top->tree;*/
if(root->right!=NULL)
top=push(top,root->right);
else
{
print(top);
top=pop(top);
if(top->count==0)
break;
if(top->tree->right!=NULL)
      root=top->tree->right;
else
top=pop(top);
}
}


}
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值