面试题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;}


原创粉丝点击