剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
来源:互联网 发布:淘宝十大黑科技 编辑:程序博客网 时间:2024/06/05 09:07
题目:
从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。如下图的二叉树,则依次打印出8,6,10,5,7,9,11.
分析:
源代码:
#include"BinaryTree.h"#include<iostream>#include<queue>using std::cout;using std::endl;using std::queue;using namespace OrdinaryBinaryTreeSpace4;void PrintTreeFromTopToBottom(BinaryTreeNode *root){if (root == NULL){ cout << "The tree is empty" << endl;return;}queue<BinaryTreeNode *> myQueue;myQueue.push(root);while (!myQueue.empty()){BinaryTreeNode *temp = myQueue.front();myQueue.pop();cout << temp->element << " ";if (temp->left != NULL)myQueue.push(temp->left);if (temp->right != NULL)myQueue.push(temp->right);}}void test11(){cout << "\t=======从上往下打印满二叉树" << endl;BinaryTreeNode *node1 = CreateBinaryTreeNode(8);BinaryTreeNode *node2 = CreateBinaryTreeNode(6);BinaryTreeNode *node3 = CreateBinaryTreeNode(10);BinaryTreeNode *node4 = CreateBinaryTreeNode(5);BinaryTreeNode *node5 = CreateBinaryTreeNode(7);BinaryTreeNode *node6 = CreateBinaryTreeNode(9);BinaryTreeNode *node7 = CreateBinaryTreeNode(11);ConnectBinaryTreeNodes(node1, node2, node3);ConnectBinaryTreeNodes(node2, node4, node5);ConnectBinaryTreeNodes(node3, node6, node7);ConnectBinaryTreeNodes(node4, NULL, NULL);ConnectBinaryTreeNodes(node5, NULL, NULL);ConnectBinaryTreeNodes(node6, NULL, NULL);ConnectBinaryTreeNodes(node7, NULL, NULL);PrintTreeFromTopToBottom(node1);DestoryTree(node1);}void test12(){cout << "\t=======从上往下打印空二叉树" << endl;PrintTreeFromTopToBottom(NULL);}/*1 / \ 2 3 / \4 5 / 6*/void test13(){cout << "\t=======从上往下打印不完全二叉树" << endl;BinaryTreeNode *node1 = CreateBinaryTreeNode(1);BinaryTreeNode *node2 = CreateBinaryTreeNode(2);BinaryTreeNode *node3 = CreateBinaryTreeNode(3);BinaryTreeNode *node4 = CreateBinaryTreeNode(4);BinaryTreeNode *node5 = CreateBinaryTreeNode(5);BinaryTreeNode *node6 = CreateBinaryTreeNode(6);ConnectBinaryTreeNodes(node1, node2, node3);ConnectBinaryTreeNodes(node2, NULL, NULL);ConnectBinaryTreeNodes(node3, node4, node5);ConnectBinaryTreeNodes(node4, node6, NULL);ConnectBinaryTreeNodes(node5, NULL, NULL);ConnectBinaryTreeNodes(node6, NULL, NULL);PrintTreeFromTopToBottom(node1);DestoryTree(node1);}/*1 / 2 /3 / 4 /5 / 6 /7*/void test14(){cout << "\t=======从上往下打印只有左孩子的二叉树" << endl;BinaryTreeNode *node1 = CreateBinaryTreeNode(1);BinaryTreeNode *node2 = CreateBinaryTreeNode(2);BinaryTreeNode *node3 = CreateBinaryTreeNode(3);BinaryTreeNode *node4 = CreateBinaryTreeNode(4);BinaryTreeNode *node5 = CreateBinaryTreeNode(5);BinaryTreeNode *node6 = CreateBinaryTreeNode(6);BinaryTreeNode *node7 = CreateBinaryTreeNode(7);ConnectBinaryTreeNodes(node1, node2, NULL);ConnectBinaryTreeNodes(node2, node3, NULL);ConnectBinaryTreeNodes(node3, node4, NULL);ConnectBinaryTreeNodes(node4, node5, NULL);ConnectBinaryTreeNodes(node5, node6, NULL);ConnectBinaryTreeNodes(node6, node7, NULL);ConnectBinaryTreeNodes(node7, NULL, NULL);PrintTreeFromTopToBottom(node1);DestoryTree(node1);}void test15(){cout << "\t=======从上往下打印只有右孩子的二叉树" << endl;BinaryTreeNode *node1 = CreateBinaryTreeNode(1);BinaryTreeNode *node2 = CreateBinaryTreeNode(2);BinaryTreeNode *node3 = CreateBinaryTreeNode(3);BinaryTreeNode *node4 = CreateBinaryTreeNode(4);BinaryTreeNode *node5 = CreateBinaryTreeNode(5);BinaryTreeNode *node6 = CreateBinaryTreeNode(6);BinaryTreeNode *node7 = CreateBinaryTreeNode(7);ConnectBinaryTreeNodes(node1, NULL, node2);ConnectBinaryTreeNodes(node2, NULL, node3);ConnectBinaryTreeNodes(node3, NULL, node4);ConnectBinaryTreeNodes(node4, NULL, node5);ConnectBinaryTreeNodes(node5, NULL, node6);ConnectBinaryTreeNodes(node6, NULL, node7);ConnectBinaryTreeNodes(node7, NULL, NULL);PrintTreeFromTopToBottom(node1);DestoryTree(node1);}int main(){test11();cout << endl;test12();cout << endl;test13();cout << endl;test14();cout << endl;test15();cout << endl;system("pause");return 0;}
=======从上往下打印满二叉树8 6 10 5 7 9 11 =======从上往下打印空二叉树The tree is empty =======从上往下打印不完全二叉树1 2 3 4 5 6 =======从上往下打印只有左孩子的二叉树1 2 3 4 5 6 7 =======从上往下打印只有右孩子的二叉树1 2 3 4 5 6 7请按任意键继续. . .
官方源代码:
#include"BinaryTree.h"#include<cstdlib>#include<cstdio>#include<deque>using namespace OrdinaryBinaryTreeSpace4;void PrintFromTopToBottom(BinaryTreeNode* pRoot){if (pRoot == NULL)return;std::deque<BinaryTreeNode *> dequeTreeNode;dequeTreeNode.push_back(pRoot);while (dequeTreeNode.size()){BinaryTreeNode *pNode = dequeTreeNode.front();dequeTreeNode.pop_front();printf("%d ", pNode->element);if (pNode->left)dequeTreeNode.push_back(pNode->left);if (pNode->right)dequeTreeNode.push_back(pNode->right);}}// ====================测试代码====================void Test(char* testName, BinaryTreeNode* pRoot){if (testName != NULL)printf("%s begins: \n", testName);PrintTreePre(pRoot);printf("The nodes from top to bottom, from left to right are: \n");PrintFromTopToBottom(pRoot);printf("\n\n");}// 10// / \// 6 14// /\ /\// 4 8 12 16void Test1(){BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10);BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6);BinaryTreeNode* pNode14 = CreateBinaryTreeNode(14);BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8);BinaryTreeNode* pNode12 = CreateBinaryTreeNode(12);BinaryTreeNode* pNode16 = CreateBinaryTreeNode(16);ConnectBinaryTreeNodes(pNode10, pNode6, pNode14);ConnectBinaryTreeNodes(pNode6, pNode4, pNode8);ConnectBinaryTreeNodes(pNode14, pNode12, pNode16);Test("Test1", pNode10);DestoryTree(pNode10);}// 5// /// 4// /// 3// /// 2// /// 1void Test2(){BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3);BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2);BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);ConnectBinaryTreeNodes(pNode5, pNode4, NULL);ConnectBinaryTreeNodes(pNode4, pNode3, NULL);ConnectBinaryTreeNodes(pNode3, pNode2, NULL);ConnectBinaryTreeNodes(pNode2, pNode1, NULL);Test("Test2", pNode5);DestoryTree(pNode5);}// 1// \// 2// \// 3// \// 4// \// 5void Test3(){BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2);BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3);BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);ConnectBinaryTreeNodes(pNode1, NULL, pNode2);ConnectBinaryTreeNodes(pNode2, NULL, pNode3);ConnectBinaryTreeNodes(pNode3, NULL, pNode4);ConnectBinaryTreeNodes(pNode4, NULL, pNode5);Test("Test3", pNode1);DestoryTree(pNode1);}// 树中只有1个结点void Test4(){BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);Test("Test4", pNode1);DestoryTree(pNode1);}// 树中没有结点void Test5(){Test("Test5", NULL);}int main(){Test1();Test2();Test3();Test4();Test5();system("pause");return 0;}
Test1 begins:10 6 4 8 14 12 16 The nodes from top to bottom, from left to right are10 6 14 4 8 12 16Test2 begins:5 4 3 2 1 The nodes from top to bottom, from left to right are:5 4 3 2 1Test3 begins:1 2 3 4 5 The nodes from top to bottom, from left to right are:1 2 3 4 5Test4 begins:1 The nodes from top to bottom, from left to right are:1Test5 begins:The tree is emptyThe nodes from top to bottom, from left to right are:请按任意键继续. . .
0 0
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- 剑指offer面试题 从上往下打印二叉树
- 剑指offer面试题23 从上往下打印二叉树 就是广度优先遍历二叉树
- 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
- 剑指offer面试题[23]-从上往下打印二叉树(按层序打印)
- 剑指Offer------从上往下打印二叉树(层序遍历)
- [剑指offer][面试题23]从上往下打印二叉树
- 【剑指offer】面试题23:从上往下打印二叉树
- 《剑指offer》面试题23从上往下打印二叉树
- 剑指Offer:面试题23 从上往下打印二叉树
- 剑指offer 面试题23—从上往下打印二叉树
- 《剑指Offer》学习笔记--面试题23:从上往下打印二叉树
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- 【剑指Offer学习】【面试题23:从上往下打印二叉树】
- 剑指Offer面试题23(Java版):从上往下打印二叉树
- 剑指offer面试题23-从上往下打印二叉树
- 剑指offer代码解析——面试题23从上往下打印二叉树
- 剑指offer-面试题23:从上往下打印二叉树
- Mybatis的增删改查
- suppose如何用
- 盒子模型
- 函数对象(2)
- U-Boot常用命令
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- 较为简洁明了的KMP算法解释
- JDBC连接数据库之连接池(5)
- 基于Android Architecture Blueprints的MVP案例分析与实现
- Android Studio ndk-Jni开发
- iOS开发探究--内存分配和分区
- android客户端从服务器端获取json数据并解析的实现代码
- 图解SqlServer更改sa密码
- Android UI Libs之android-gif-drawable