二叉树递归和非递归遍历算法代码

#include<iostream>
#include<stack>
typedef struct node
{
int data;
struct node*leftptr;
struct node*rightptr;
}treenode;


void initdata(treenode *head)
{
head->data = 30;
head->leftptr = (treenode*)malloc(sizeof(treenode));
memset(head->leftptr, 0, sizeof(treenode));
head->leftptr->data = 20;


head->rightptr = (treenode*)malloc(sizeof(treenode));
memset(head->rightptr, 0, sizeof(treenode));
head->rightptr->data = 23;


head->leftptr->leftptr = (treenode*)malloc(sizeof(treenode));
memset(head->leftptr->leftptr, 0, sizeof(treenode));
head->leftptr->leftptr->data = 16;


head->leftptr->rightptr = (treenode*)malloc(sizeof(treenode));
memset(head->leftptr->rightptr, 0, sizeof(treenode));
head->leftptr->rightptr->data = 17;


head->rightptr->leftptr = (treenode*)malloc(sizeof(treenode));
memset(head->rightptr->leftptr, 0, sizeof(treenode));
head->rightptr->leftptr->data = 29;
head->rightptr->rightptr = (treenode*)malloc(sizeof(treenode));
memset(head->rightptr->rightptr, 0, sizeof(treenode));
head->rightptr->rightptr->data = 33;


}


void reserverfirst(treenode*head)
{
if (head == NULL)
{
return;
}
std::cout << head->data << std::endl;
if (head->leftptr!=NULL)
reserverfirst(head->leftptr);
if (head->rightptr!=NULL)
reserverfirst(head->rightptr);
}
std::stack<treenode*>ptrtree;
void reserveusestack(treenode*head)
{
if (head == NULL)
{
return;
}
if (head->rightptr != NULL)
{
ptrtree.push(head->rightptr);
}
}


#if 0
void preOrder2(treenode* pRoot)
{
std::stack<treenode*> s;
treenode *p = pRoot;


if (pRoot == NULL)
return;
while (p != NULL || !s.empty())
{
while (p != NULL)
{
std::cout << p->data << " ";
s.push(p);
p = p->leftptr;
}
if (!s.empty())
{
p = s.top();
s.pop();
p = p->rightptr;
}
}
}


#endif




int main()
{
treenode*head = (treenode*)malloc(sizeof(treenode));
memset(head, 0, sizeof(treenode));
initdata(head);
//reserverfirst(head);
preOrder2(head);
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值