二叉树三叉链表实现类
来源:互联网 发布:淘宝关键词修改不见 编辑:程序博客网 时间:2024/05/16 01:02
#include <iostream>using namespace std;enum Statue{ TRUE, FALSE, INSERT_ERROR};//二叉树的三叉链表节点结构template <class NodeType> class BinaryNode{public: NodeType value; BinaryNode<NodeType> *parent, *lChild, *rChild; BinaryNode();};template <class NodeType>BinaryNode<NodeType>::BinaryNode(){ parent = NULL; lChild = NULL; rChild = NULL;}//二叉树类,三叉链表实现template <class NodeType> class BinaryTree{public: BinaryTree(); BinaryTree(BinaryNode<NodeType> *root); ~BinaryTree(); void DestroyTree(); void CreatBinaryTree(BinaryNode<NodeType> *root); Statue IsEmpty(); //判断是否为空树 int GetDepth(BinaryNode<NodeType> *node); //计算从node节点开始的树的层数 //在二叉树中寻找值为value的节点,如有重复则返回中序遍历的第一个。PS:NodeType需要重载==符号 BinaryNode<NodeType>* Find(NodeType value); //往node节点位置插入child节点 Statue InsertChild(BinaryNode<NodeType> *nodeParent, BinaryNode<NodeType> *node, BinaryNode<NodeType> *child); void DeleteTree(BinaryNode<NodeType> *node); //删除node节点为根的树,同时释放其占用内存private: BinaryNode<NodeType> *root; BinaryNode<NodeType>* FindFrom(BinaryNode<NodeType> *from, NodeType value);};template <class NodeType>BinaryTree<NodeType>::BinaryTree(){ root = NULL;}template <class NodeType>BinaryTree<NodeType>::BinaryTree(BinaryNode<NodeType> *root){ CreatBinaryTree(root);}template <class NodeType>void BinaryTree<NodeType>::DestroyTree(){ DeleteTree(root->lChild); DeleteTree(root->rChild); delete(root);}template <class NodeType>BinaryTree<NodeType>::~BinaryTree(){ DestroyTree();}template <class NodeType>Statue BinaryTree<NodeType>::IsEmpty(){ return (NULL == root) ? TRUE : FALSE;}template <class NodeType>int BinaryTree<NodeType>::GetDepth(BinaryNode<NodeType> *node){ if (NULL == node) { return 0; } int lDepth, rDepth; lDepth = GetDepth(node->lChild); rDepth = GetDepth(node->rChild); return (lDepth > rDepth) ? lDepth + 1 : rDepth + 1;}template <class NodeType>void BinaryTree<NodeType>::CreatBinaryTree(BinaryNode<NodeType> *node){ if (NULL == node) { DestroyTree(); root = NULL; return ; } root = new BinaryNode<NodeType>; root->value = node->value; InsertChild(root, root->lChild, node->lChild); InsertChild(root, root->rChild, node->rChild);}template <class NodeType>Statue BinaryTree<NodeType>::InsertChild(BinaryNode<NodeType> *nodeParent, BinaryNode<NodeType> *node, BinaryNode<NodeType> *child){ Statue result = INSERT_ERROR; if (NULL == child) { DestroyTree(); result = TRUE; return result; } node = new BinaryNode<NodeType>; node->parent = nodeParent; result = InsertChild(node, node->lChild, child->lChild); if (INSERT_ERROR == result) { return result; } result = InsertChild(node, node->rChild, child->rChild); return result;}template <class NodeType>void BinaryTree<NodeType>::DeleteTree(BinaryNode<NodeType> *node){ if (NULL = node) { return; } DeleteTree(node->lChild); DeleteTree(node->rChild); free(node); node = NULL;}template <class NodeType>BinaryNode<NodeType>* BinaryTree<NodeType>::FindFrom(BinaryNode<NodeType> *from, NodeType value){ if (NULL == from) { return NULL; } if (from->value == value) { return from; } BinaryNode<NodeType> * findresult; findresult = FindFrom(from->lChild, value); if (NULL == findresult) { findresult = FindFrom(from->rChild, value); } return findresult;}template <class NodeType>BinaryNode<NodeType>* BinaryTree<NodeType>::Find(NodeType value){ return FindFrom(root, value);}
0 0
- 二叉树三叉链表实现类
- 二叉树实现类 —— 三叉链表实现
- 三叉链表实现-二叉树
- 三叉链表实现二叉树
- 二叉树:三叉链表
- 数据结构:二叉树的三叉链表存储--Java实现
- 二叉树的三叉链表存储及其Java实现
- 二叉树的三叉链表存储(java实现)
- 三叉链表实现二叉树基本操作
- 二叉树的三叉链表存储及其Java实现
- 平衡二叉树实现(三叉链表 平衡因子方式实现)
- 二叉树的三叉链表存储结构的简单实现
- 数据结构之---C语言实现二叉树的三叉链表存储表示
- 我写的二叉树(采用了三叉链表)
- 二叉树的三叉链表存储结构
- Java基础 - 二叉树的三叉链表存储
- 二叉链表和三叉链表
- 二叉树扩展之三叉树C++类模板的实现
- abstract类和abstract方法
- GTK+的优点与QT的优点
- ios小demo之图片播放器第一步:加载图片功能
- ARM920T的MMU与Cache ——转载
- C语言运算优先级
- 二叉树三叉链表实现类
- href 怎么使用post方式提交数据
- Android四大组件之ContentProvider
- 计算机科学中最重要的32个算法
- C++第7周(春)项目4 友元类
- IntelliJ IDEA 快捷键大全
- 蓝牙dun
- 梦在远方,你依然在心上
- SQL 优化50种方法