数据结构--树
/******************************************************************* Copyright(c) 2016, Harry He All rights reserved. Distributed under the BSD license. (See accompanying file LICENSE.txt at https://github.com/zhedahht/CodingInterviewChinese2/blob/master/LICENSE.txt) *******************************************************************/ //================================================================== // 《剑指Offer——名企面试官精讲典型编程题》代码 // 作者:何海涛 //================================================================== #pragma once #include <vector> struct TreeNode { int m_nValue; std::vector<TreeNode*> m_vChildren; }; __declspec( dllexport ) TreeNode* CreateTreeNode(int value); __declspec( dllexport ) void ConnectTreeNodes(TreeNode* pParent, TreeNode* pChild); __declspec( dllexport ) void PrintTreeNode(const TreeNode* pNode); __declspec( dllexport ) void PrintTree(const TreeNode* pRoot); __declspec( dllexport ) void DestroyTree(TreeNode* pRoot);
/******************************************************************* Copyright(c) 2016, Harry He All rights reserved. Distributed under the BSD license. (See accompanying file LICENSE.txt at https://github.com/zhedahht/CodingInterviewChinese2/blob/master/LICENSE.txt) *******************************************************************/ //================================================================== // 《剑指Offer——名企面试官精讲典型编程题》代码 // 作者:何海涛 //================================================================== #include "Tree.h" TreeNode* CreateTreeNode(int value) { TreeNode* pNode = new TreeNode(); pNode->m_nValue = value; return pNode; } void ConnectTreeNodes(TreeNode* pParent, TreeNode* pChild) { if(pParent != nullptr) { pParent->m_vChildren.push_back(pChild); } } void PrintTreeNode(const TreeNode* pNode) { if(pNode != nullptr) { printf("value of this node is: %d.\n", pNode->m_nValue); printf("its children is as the following:\n"); std::vector<TreeNode*>::const_iterator i = pNode->m_vChildren.begin(); while(i < pNode->m_vChildren.end()) { if(*i != nullptr) printf("%d\t", (*i)->m_nValue); } printf("\n"); } else { printf("this node is nullptr.\n"); } printf("\n"); } void PrintTree(const TreeNode* pRoot) { PrintTreeNode(pRoot); if(pRoot != nullptr) { std::vector<TreeNode*>::const_iterator i = pRoot->m_vChildren.begin(); while(i < pRoot->m_vChildren.end()) { PrintTree(*i); ++i; } } } void DestroyTree(TreeNode* pRoot) { if(pRoot != nullptr) { std::vector<TreeNode*>::iterator i = pRoot->m_vChildren.begin(); while(i < pRoot->m_vChildren.end()) { DestroyTree(*i); ++i; } delete pRoot; } }