php 多叉树实现,一个简单的多叉树C++实现
///Tree.cpp 文件#include "stdafx.h"#include "Tree.h"//***** 下面是對于TreeNode結構體的定義實現*****///TreeNode::TreeNode(inttype =0, TreeNode* Parent =0) {
_data = type;
_parent = Parent;
}voidTreeNode::SetParent(TreeNode& node) {
_parent = &node;
}voidTreeNode::InsertChildren(TreeNode& node) {
TreeNode* p = &node;
_children.push_back(p);
}//***** 下面是對于Tree類的定義實現*****///Tree::Tree() {
}
Tree::Tree(constinttype) {
_nodes.push_back(newTreeNode(type));
}
Tree::Tree(constTree& t) {if(t._nodes.empty())return;
clone(t._nodes.front(), _nodes,0);
}
Tree::Tree(constinttype,constlist& lit) {
TreeNode* root =newTreeNode(type);//建立根節點_nodes.push_back(root);//放入樹中list::const_iterator it;for(it = lit.begin(); it != lit.end(); it++) {if(!((*it)->_nodes.empty())) {//如果當前節點元素不為空Tree* tp =newTree(**it);
TreeNode* p = tp->_nodes.front();
root->_children.push_back(p);//設置根的子節點p->_parent = root;//設置節點的父節點為根list::iterator lit1 = tp->_nodes.begin();list::iterator lit2 = tp->_nodes.end();list::iterator lit3 = _nodes.end();
_nodes.insert(lit3, lit1, lit2);
}
}
}
Tree::~Tree() {for(list::iterator it = _nodes.begin(); it != _nodes.end(); it++) {delete* it;
}
}
Tree& Tree::operator=(constTree & t) {
Clear();
Tree* p =newTree(t);
_nodes = p->_nodes;return*this;
}boolTree::operator==(constTree& t) {if(_nodes.size() != t._nodes.size()) {returnfalse;
}list::iterator it = _nodes.begin();list::const_iterator _it = t._nodes.begin();while(it != _nodes.end() && _it != t._nodes.end()) {if((*it)->_data != (*_it)->_data) {returnfalse;
}
it++;
_it++;
}returntrue;
}boolTree::operator!=(constTree& t) {if(_nodes.size() != _nodes.size()) {returntrue;
}else{list::iterator it = _nodes.begin();list::const_iterator _it = t._nodes.begin();while(it != _nodes.end() && _it != t._nodes.end()) {if((*it)->_data != (*_it)->_data) {returntrue;
}
it++;
_it++;
}returnfalse;
}
}voidTree::Clear() {for(list::iterator it = _nodes.begin(); it != _nodes.end(); it++) {delete* it;
}
_nodes.clear();
}boolTree::IsEmpty()const{return_nodes.empty();
}intTree::Size()const{return(int)_nodes.size();
}intTree::Leaves() {inti =0;list::iterator it = _nodes.begin();while(it != _nodes.end()) {if((*it)->_children.size() ==0) {
i++;
}
it++;
}returni;
}intTree::Height() {if(_nodes.size() !=0) {
TreeNode* TNode = _nodes.front();returnheight(TNode);
}else{return-1;//判斷為空樹}
}intTree::height(TreeNode* node) {if(!node) {return-1;
}else{listplist = node->_children;if(plist.size() ==0) {return0;
}inthA =0;for(list::iterator it = plist.begin(); it != plist.end(); it++) {inthB = height(*it);if(hB>hA) {
hA = hB;
}
}returnhA +1;
}
}
Iterator Tree::begin() {returnIterator(this, _nodes.begin());
}
Iterator Tree::end() {returnIterator(this, _nodes.end());
}intTree::Root()const{return(*_nodes.begin())->_data;
}boolTree::IsRoot(Iterator it) {
TreeNode p = *it;if(p._parent ==0) {returntrue;
}returnfalse;
}boolTree::isLeaf(Iterator it) {
TreeNode p = *it;if(p._children.size() ==0) {returntrue;
}returnfalse;
}
Iterator Tree::Parent(Iterator it) {
TreeNode p = *it;
Tree* t = it._tree;
Iterator Ite(t, p._parent);returnIte;
}intTree::NumChildren(Iterator it) {
TreeNode p = *it;return(int)p._children.size();
}//***** 下面是對于Tree::Iterator類的定義實現*****///Iterator::Iterator() {
}
Iterator::Iterator(constIterator& it) {
_tree = it._tree;
_lit = it._lit;
}
Iterator::Iterator(Tree* t, TreeNode* n) {
_tree = t;list& nodes = _tree->_nodes;
_lit = find(nodes.begin(), nodes.end(), n);// Members}
Iterator::Iterator(Tree * t,list::iterator lt) {
_tree = t;
_lit = lt;
}voidIterator::operator=(constIterator& it) {
_tree = it._tree;
_lit = it._lit;
}boolIterator::operator==(constIterator & it) {return_tree == it._tree && _lit == it._lit;
}boolIterator::operator!=(constIterator & it) {return_tree != it._tree || _lit != it._lit;
}
Iterator& Iterator::operator++() {
++_lit;return*this;
}
Iterator Iterator::operator++(int) {
Iterator it(*this);
++_lit;returnit;
}intIterator::operator*()const{return((*_lit)->_data);
}boolIterator::operator!() {return_lit == _tree->_nodes.end();
}//Clone函數TreeNode* clone(TreeNode* node, List& nodes, TreeNode* nodep) {
TreeNode* cp =newTreeNode(node->_data, nodep);
nodes.push_back(cp);
List& l = node->_children;
List& cl = cp->_children;for(list::iterator lt = l.begin(); lt != l.end(); lt++) {
cl.push_back(clone(*lt, nodes, cp));
}returncp;
}
總結
以上是生活随笔為你收集整理的php 多叉树实现,一个简单的多叉树C++实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 简繁体转换类库,OpenCC f
- 下一篇: php 隐式路由,关于Laravel 7