面试题23—从上往下打印二叉树
2017-06-27 09:37
447 查看
题目:从上往下打印二叉树的每个节点,同一行的节点按照从左到右打印。
代码示例:
头文件:BinaryTree.h
源文件:BinaryTree.cpp
主函数:main.cpp
代码示例:
头文件: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); else printf("left child is null.\n"); if (pNode->m_pRight != NULL) printf("value of its right child is: %d.\n", pNode->m_pRight->m_nValue); else printf("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 16 void 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 // / // 1 void 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 // \ // 5 void 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; }
相关文章推荐
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
- 《剑指offer》(面试题23):从上往下打印二叉树
- 剑指Offer面试题23(Java版):从上往下打印二叉树
- 剑指offer-面试题23-从上往下打印二叉树
- 面试题23从上往下打印二叉树
- 面试题23:从上往下打印二叉树
- 剑指Offer:面试题23 从上往下打印二叉树
- 剑指offer之面试题23:从上往下打印二叉树
- 从上往下打印二叉树(面试题 23)
- 面试题23:从上往下打印二叉树
- 面试题23 从上往下打印二叉树
- 面试题23:从上往下打印二叉树(Leetcode-102)
- 剑指offer 面试题23—从上往下打印二叉树
- 剑指offer——面试题23:从上往下打印二叉树(树的递归创建,广度优先搜索,队列)
- 面试题23:从上往下打印二叉树
- 剑指offer--面试题23:从上往下打印二叉树
- 剑指offer代码解析——面试题23从上往下打印二叉树
- 剑指offer面试题23:从上往下打印二叉树
- 剑指offer之面试题23:从上往下打印二叉树