日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 多叉树实现,一个简单的多叉树C++实现

發布時間:2025/3/20 php 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。