从上往下打印二叉树(面试题 23)

来源:互联网 发布:java 网络框架 编辑:程序博客网 时间:2024/05/22 06:58

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印(层次遍历)。

#include "stdlib.h"#include "iostream"#include "stack"#include "queue"using namespace std;typedef int KeyType;typedef struct Node {KeyType key;struct Node* left;struct Node* right;struct Node* parent;}Node,*pNode;void insert(pNode* root,KeyType key){//初始化插入结点pNode p =(pNode)malloc(sizeof(Node));p->key =key;p->left =p->right =p->parent =NULL;if((*root)==NULL){*root =p;return;}//插入到当前结点(*root)的左孩子if ((*root)->left ==NULL&&(*root)->key>key){p->parent =(*root);(*root)->left =p;return;}if ((*root)->right ==NULL&&(*root)->key<key){p->parent =(*root);(*root)->right =p;return;}if ((*root)->key>key){insert(&(*root)->left,key);}else if((*root)->key<key)insert(&(*root)->right,key);elsereturn;}void create(pNode* root,KeyType *keyArray,int length){int i;//逐个结点插入二叉树for (i=0;i<length;i++){insert(root,keyArray[i]);}}void print(pNode root){queue<pNode>  queue1;pNode p;if (root){queue1.push(root);}while(!queue1.empty()){p =queue1.front();cout<<p->key<<" "<<endl;if (p->left){queue1.push(p->left);}if (p->right){queue1.push(p->right);}queue1.pop();}}int main(){int i;//注意这种传参数的方式,以root地址作为参数,返回根节点的指针pNode root =NULL;KeyType nodeArray[11] ={15,6,18,3,7,17,20,2,4,13,9};create(&root,nodeArray,11);//inorderTraver(root);print(root);printf("\n");}


0 0
原创粉丝点击