面试题23—从上往下打印二叉树
来源:互联网 发布:多益网络面试经验 编辑:程序博客网 时间:2024/06/01 07:59
题目:从上往下打印二叉树的每个节点,同一行的节点按照从左到右打印。
代码示例:
头文件:BinaryTree.h
#pragma once#include<iostream>struct BinaryTreeNode{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;};BinaryTreeNode* CreateBinaryTreeNode(int value);void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight);void PrintTreeNode(BinaryTreeNode* pNode);void PrintTree(BinaryTreeNode* pRoot);void DestroyTree(BinaryTreeNode* pRoot);
源文件:BinaryTree.cpp
#include "BinaryTree.h"BinaryTreeNode* CreateBinaryTreeNode(int value){BinaryTreeNode* pNode = new BinaryTreeNode();pNode->m_nValue = value;pNode->m_pLeft = NULL;pNode->m_pRight = NULL;return pNode;}void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight){if (pParent != NULL){pParent->m_pLeft = pLeft;pParent->m_pRight = pRight;}}void PrintTreeNode(BinaryTreeNode* pNode){if (pNode != NULL){printf("value of this node is: %d\n", pNode->m_nValue);if (pNode->m_pLeft != NULL)printf("value of its left child is: %d.\n", pNode->m_pLeft->m_nValue);elseprintf("left child is null.\n");if (pNode->m_pRight != NULL)printf("value of its right child is: %d.\n", pNode->m_pRight->m_nValue);elseprintf("right child is null.\n");}else{printf("this node is null.\n");}printf("\n");}void PrintTree(BinaryTreeNode* pRoot){PrintTreeNode(pRoot); if (pRoot != NULL){if (pRoot->m_pLeft != NULL)PrintTree(pRoot->m_pLeft);if (pRoot->m_pRight != NULL)PrintTree(pRoot->m_pRight);}}void DestroyTree(BinaryTreeNode* pRoot){if (pRoot != NULL){BinaryTreeNode* pLeft = pRoot->m_pLeft;BinaryTreeNode* pRight = pRoot->m_pRight;delete pRoot;pRoot = NULL;DestroyTree(pLeft);DestroyTree(pRight);}}
主函数:main.cpp
#include "BinaryTree.h"#include <deque>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->m_nValue);if (pNode->m_pLeft)dequeTreeNode.push_back(pNode->m_pLeft);if (pNode->m_pRight)dequeTreeNode.push_back(pNode->m_pRight);}}// ====================测试代码====================void Test(char* testName, BinaryTreeNode* pRoot){if (testName != NULL)printf("%s begins: \n", testName);PrintTree(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);ConnectTreeNodes(pNode10, pNode6, pNode14);ConnectTreeNodes(pNode6, pNode4, pNode8);ConnectTreeNodes(pNode14, pNode12, pNode16);Test("Test1", pNode10);DestroyTree(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);ConnectTreeNodes(pNode5, pNode4, NULL);ConnectTreeNodes(pNode4, pNode3, NULL);ConnectTreeNodes(pNode3, pNode2, NULL);ConnectTreeNodes(pNode2, pNode1, NULL);Test("Test2", pNode5);DestroyTree(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);ConnectTreeNodes(pNode1, NULL, pNode2);ConnectTreeNodes(pNode2, NULL, pNode3);ConnectTreeNodes(pNode3, NULL, pNode4);ConnectTreeNodes(pNode4, NULL, pNode5);Test("Test3", pNode1);DestroyTree(pNode1);}// 树中只有1个结点void Test4(){BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);Test("Test4", pNode1);DestroyTree(pNode1);}// 树中没有结点void Test5(){Test("Test5", NULL);}int main(){Test1();/*Test2();Test3();Test4();Test5();*/return 0;}
阅读全文
0 0
- 面试题23—从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 从上往下打印二叉树(面试题 23)
- 面试题23 从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 面试题23从上往下打印二叉树
- 面试题23_从上往下打印二叉树
- 面试题23从上往下打印二叉树
- 面试题:23从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 面试题23从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 报文格式
- ERROR: SWT folder '' does not exist
- Node安装和使用
- syscon 的使用
- 理解回调机制-java
- 面试题23—从上往下打印二叉树
- 装机版制作启动u盘图文教程
- SpringBoot系列—Spring Cloud快速入门
- 像大牛一样写代码: 31个Android 开发者工具
- 笨方法学Python笔记(5)
- Android Studio常用插件
- pyhton3 ubantu不能安装PIL
- Linux 查看服务列表命令
- Bootstrap框架的分析