多叉树的层次遍历算法
delete node2; delete node3; delete node4; delete node5; delete node6; delete node7; delete node8; 0; } 打印出来结果是: 0 1 2 3 10 4 5 6 7 8 (其中10是故意用来测试) 这个只是简单测试,大家可以用模板来实现. 这个算法有几个关键地方: 1. list 中存放是指针,好处就不用说了.如果不用指针话,在delete时候会出现问题.原因大家也清楚. 2. 用队列比 栈 实现起来要方便 2009-2-12 4:00:36 疯狂代码 /
long getSelfId; void SelfId(long selfID); getNodeName; void NodeName( &nodeName); }; //返回当前节点孩子集合 inline list <TreeNode*>* TreeNode::getChildList { p_childList; } inline long TreeNode::getSelfId { selfID; } inline void TreeNode::SelfId(long selfID) { this->selfID = selfID; } inline TreeNode::getNodeName { nodeName; } inline void TreeNode::NodeName( &nodeName) { this->nodeName = nodeName; } #end TreeNode.cpp 文件 # "stdafx.h" # "TreeNode.h"
root.SelfId(0); TreeNode *node1 = TreeNode; TreeNode *node2 = TreeNode; TreeNode *node3 = TreeNode; TreeNode *node10 = TreeNode; node10->SelfId(10); node1->SelfId(1); node2->SelfId(2); node3->SelfId(3); root.insertChildNode(node1); root.insertChildNode(node2); root.insertChildNode(node3); root.insertChildNode(node10); TreeNode *node4 = TreeNode; TreeNode *node5 = TreeNode; node4->SelfId(4); node5->SelfId(5); node1->insertChildNode(node4); node1->insertChildNode(node5); TreeNode *node6 = TreeNode; TreeNode *node7 = TreeNode; TreeNode *node8 = TreeNode; node6->SelfId(6); node7->SelfId(7); node8->SelfId(8); node4->insertChildNode(node6); node4->insertChildNode(node7); node4->insertChildNode(node8); //遍历 root.LevelTraverse; delete node1;
{ p_childList = list<TreeNode*>; } p_childList->push_back((TreeNode*)treeNode); } /*遍历树层次遍历*/ void TreeNode::LevelTraverse { queue<TreeNode*> queue ; queue.push((TreeNode*)this); TreeNode *p = NULL; while (!queue.empty) { p = queue.front; queue.pop; cout<<"treenode is: "<<p->getSelfId<<endl; (NULL!= p->getChildList) { list<TreeNode*>::iterator it = (p->getChildList)->begin; while(it!= (p->getChildList)->end) { queue.push((*it)); it; } } } } 测试代码: # "stdafx.h" # "TreeNode.h" ( argc, char* argv) { TreeNode root;
TreeNode::TreeNode { selfID = 0 ; nodeName = ""; p_childList = NULL; } TreeNode::~TreeNode { delete p_childList; } //判断某个节点是否为叶子节点 bool TreeNode::isLeaf { (NULL p_childList) { true; } { false; } } /*向当前节点中插入个子节点*/ void TreeNode::insertChildNode(TreeNode *treeNode) { (NULLtreeNode) { cout<<"treeNode is null !"<<endl; ; } (isLeaf)
多叉树的层次遍历Βιβλιοθήκη 法疯狂代码 / ĵ:http://Arithmetic/Article33649.html 最近学习c,越看越觉得以前所学只是皮毛.这几天正好有空闲就写点小算法玩玩. 多叉树层次遍历 这个在网上有完整好像不多.这次我就把写贴出来, 有兴趣朋友起来研究下. TreeNode.h 文件 #ndef __TREENODE_ # __TREENODE_ # "StdAfx.h" # <> # <list> # <iostream> # <queue> using std; TreeNode { private: long selfID; nodeName; list<TreeNode*> *p_childList; public: TreeNode; ~TreeNode; /*向当前节点中插入个子节点*/ void insertChildNode(TreeNode *treeNode); /*遍历树层次遍历*/ void LevelTraverse ; //判断某个节点是否为叶子节点 bool isLeaf; //返回当前节点孩子集合 list <TreeNode*>* getChildList;