打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
程序员面试100题(算法)之层次遍历二叉树(含二叉树前序创建、层次遍历、前序遍历)
  1. // 程序员面试100题(算法)之层次遍历二叉树(用队列实现)   
  2.   
  3. #include "stdafx.h"   
  4. #include <iostream>   
  5. #include <deque>   
  6.   
  7. using namespace std;  
  8.   
  9. struct BiTreeNode  
  10. {  
  11.     BiTreeNode *leftNode;  
  12.     BiTreeNode *rightNode;  
  13.     int value;  
  14. };  
  15.   
  16. BiTreeNode *CreateBiTree(BiTreeNode *&root)  
  17. {  
  18.     int data = 0;  
  19.     cin >> data;  
  20.   
  21.     if(-1 == data)  
  22.         return NULL;  
  23.     else  
  24.     {  
  25.         root= (BiTreeNode*)malloc(sizeof(BiTreeNode));  
  26.         if(root)  
  27.         {  
  28.             root->value = data;  
  29.             root->leftNode = NULL;  
  30.             root->rightNode = NULL;  
  31.             CreateBiTree(root->leftNode);  
  32.             CreateBiTree(root->rightNode);  
  33.         }  
  34.         else  
  35.         {  
  36.             cout << "No space" <<endl;  
  37.             return NULL;  
  38.         }  
  39.     }  
  40.       
  41.     return root;  
  42. }  
  43.   
  44. void PreTraverseBiTree(BiTreeNode *root)    
  45. {    
  46.    if(root)    
  47.    {    
  48.        cout << root->value << "\t";    
  49.        PreTraverseBiTree(root->leftNode);    
  50.        PreTraverseBiTree(root->rightNode);      
  51.    }    
  52. }    
  53.   
  54. void LevelTraverse(BiTreeNode *root)  
  55. {  
  56.     deque<BiTreeNode *> dequeTree;  
  57.   
  58.     if(NULL == root)  
  59.         return;  
  60.   
  61.     dequeTree.push_back(root);  
  62.   
  63.     while(!dequeTree.empty())  
  64.     {  
  65.         BiTreeNode *node = dequeTree.front();  
  66.         cout << node->value << "\t";  
  67.         dequeTree.pop_front();  
  68.   
  69.         if(node->leftNode)     
  70.             dequeTree.push_back(node->leftNode);  
  71.   
  72.         if(node->rightNode)  
  73.             dequeTree.push_back(node->rightNode);  
  74.     }  
  75.   
  76.     cout << endl;    
  77. }  
  78.   
  79. int _tmain(int argc, _TCHAR* argv[])  
  80. {  
  81.     BiTreeNode *root = NULL;  
  82.   
  83.     cout << "Please create the tree with preorder(-1 means NULL):" << endl;    
  84.     CreateBiTree(root);  
  85.     cout << "The result of preorder traverse is:" << endl;    
  86.     PreTraverseBiTree(root);  
  87.     cout << endl;    
  88.     cout << "The result of level-traverse is:" << endl;    
  89.     LevelTraverse(root);  
  90.   
  91.     return 0;  
  92. }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
你应该掌握的——树和二叉树
二叉树的基本性质
二叉树节点计算法方法
二叉树的遍历方法及递归实现
程序员应知应会之一文读懂二叉树的四种遍历
树、二叉树、完全/满/平衡二叉树的理解与对比
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服