二叉树的层次访问(C++实现)
#include <stdio.h> #include <stdlib.h> #include <assert.h> #include <queue> #include <list> using namespace std; typedef struct tree{ struct tree *pLeft; struct tree *pRight; int data; }*pT,T; pT CreateTree(){ int data=0; pT p=NULL; puts("请输入要插入的数据:"); scanf("%d",&data); if(data==0) return NULL; p=(pT)malloc(sizeof(T)); p->data=data; printf("输入%d 的左节点值:",data); p->pLeft=CreateTree(); printf("输入%d 的右节点值:",data); p->pRight=CreateTree(); return p; } void Visit(pT root){ pT p=NULL; queue<pT,list<pT>> Queue;//建立一个链表 if(root==NULL) return ; Queue.push(root);//根结点入队首 while(Queue.size()){//当队列非空时循环 p=Queue.front();//出队一个结点 printf("%d\t",p->data);//输出结点 Queue.pop();//从队列中删除结点 if(p->pLeft) Queue.push(p->pLeft);//左子树入队 if(p->pRight) Queue.push(p->pRight);//右子树入队 } } int main(){ pT root=NULL; root=CreateTree(); Visit(root); return 0; }
输入:
1 2 4 0 7 0 0 5 0 0 3 0 6 0 0
输出:
Success time: 0 memory: 16064 signal:0 请输入要插入的数据: 输入1 的左节点值:请输入要插入的数据: 输入2 的左节点值:请输入要插入的数据: 输入4 的左节点值:请输入要插入的数据: 输入4 的右节点值:请输入要插入的数据: 输入7 的左节点值:请输入要插入的数据: 输入7 的右节点值:请输入要插入的数据: 输入2 的右节点值:请输入要插入的数据: 输入5 的左节点值:请输入要插入的数据: 输入5 的右节点值:请输入要插入的数据: 输入1 的右节点值:请输入要插入的数据: 输入3 的左节点值:请输入要插入的数据: 输入3 的右节点值:请输入要插入的数据: 输入6 的左节点值:请输入要插入的数据: 输入6 的右节点值:请输入要插入的数据: 1 2 3 4 5 6 7
代码测试通过:
http://ideone.com/4qfZVu
出于简化的考滤,使用了C++中的队列模版.
树的结构为:
1
/ \
2 3
/ \ \
4 5 6
\
7