二叉树的层次访问(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
posted @ 2017-03-10 17:44  夜梦多离殇  阅读(353)  评论(0编辑  收藏  举报