广义表法建立二叉树

来源:互联网 发布:刘亦菲牙齿知乎 编辑:程序博客网 时间:2024/06/06 12:25

一直以来对树稍微存在一点儿恐惧感,最近打算好好顺一顺数据结构,于是从二叉树开始对树进行研究。这个方法主要参考殷人昆第二版的数据结构(清华大学出版社第二版)。实现也都是用模板,后来的实例是用char型。其中涉及到友员函数和操作符重载的使用,这一块有点儿忘了,就当复习了一下。


/*********************************date:2014.5.10author:andrew**********************************///BinTree.h#include<iostream>using namespace std;template<class T>//definition of the node of binary treestruct BinTreeNode{T data;                                              //dataBinTreeNode<T>* lChild, *rChild;    //pointer points to left child and right childBinTreeNode() :lChild(NULL), rChild(NULL){};//constructorBinTreeNode(T d, BinTreeNode<T> *l=NULL, BinTreeNode<T>*r=NULL){data = d;lChild = l;rChild=r;}};template<class T>//class definitionclass BinTree{public:BinTree() :root(NULL){}BinTree(T data){value = data;root = NULL;}~BinTree(){destroy(root);}int Size(){return Size(root);}bool isEmpty(){return (root == NULL) ? true : false;}BinTreeNode<T> *Parent(BinTreeNode<T> *current){return (root == NULL || current == root) ? NULL : Parent(root,current);}BinTree<T> *LeftChild(BinTreeNode<T> *current){return (current != NULL) ? current->lChild : NULL;}BinTree<T> *RightChild(BinTreeNode<T> *current){return (current != NULL) ? current->rChild : NULL;}BinTreeNode<T> *getRoot(){return root;}void CreateBinTree(istream& in,BinTreeNode<char> *subtree);private:BinTreeNode<T> *root;T value;void destroy(BinTreeNode<T> *subTree);BinTreeNode<T> *Parent(BinTreeNode<T>*subTree,BinTreeNode<T>*current);public:void Traverse(BinTreeNode<T> *subTree, ostream& out);friend istream& operator>>(istream& in,BinTree<char>& Tree);friend ostream& operator<<(ostream& out, BinTree<char>& Tree);};


//BinTree.cpp#include"BinTree.h"#include<iostream>#include<stack>using namespace std;template<class T>void BinTree<T>::destroy(BinTreeNode<T> *subTree){if (subTree != NULL){destroy(subTree->lChild);//delete left subTree  recucivelydestroy(subTree->rChild);   //delete right subTree recucivelydelete subTree;}}template<class T>BinTreeNode<T> *BinTree<T>::Parent(BinTreeNode<T> *subTree, BinTreeNode<T> *current){if (subTree == NULL)return NULL;if (subTree->lChild == current || subTree->rChild == current)return subTree;return Parent(subTree->lChild, current);return Parent(subTree->rChild, current);}//create binary tree using generalized listvoid CreateBinTree(istream& in, BinTreeNode<char> *&subTree){stack<BinTreeNode<char> *>s;subTree = NULL;BinTreeNode<char> *p, *t;int k;            //tag,1 for left,2 for rightint count = 0;     //index of string,point to the current handlingchar ch;in >> ch;while (ch != '#'){switch (ch){case '(':{s.push(p);k = 1;break;}case ')':{t = s.top();s.pop();break;}case ',':{k = 2;break;}default:{   p = new BinTreeNode<char>(ch);   if (subTree == NULL)   subTree = p;   else if (k == 1)   {   t = s.top();   t->lChild = p;   }   else   {   t = s.top();   t->rChild = p;   }}}in >> ch;}cout << "Create successfully!" << endl;}template<class T>void BinTree<T>::Traverse(BinTreeNode<T>*subTree, ostream&out){if (subTree != NULL){out << subTree->data << "  ";Traverse(subTree->lChild, out);Traverse(subTree->rChild, out);}}//template<class T>istream& operator>>(istream& in, BinTree<char>&Tree){CreateBinTree(in, Tree.root);return in;}//template<class T>ostream& operator<< (ostream&out, BinTree<char>&Tree){out << "Traverse the binary tree:" << endl;Tree.Traverse(Tree.root, out);out << endl;return out;}int main(){BinTree<char> bintree;BinTreeNode<char> *bTreeNode = NULL;cout << "Input generalized list,end with#:" << endl;cin >> bintree;cout << bintree;return 0;}


测试结果:

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝吃奶粉过敏了怎么办 1岁宝宝不喝奶粉怎么办 母乳不够宝宝不喝奶粉怎么办 宝宝吃奶粉上火了怎么办 我小孩不喝奶粉怎么办 2岁宝宝不喝奶粉怎么办 婴儿吃奶粉上火了怎么办 100天的宝宝咳嗽怎么办 40天的小孩咳嗽怎么办 40天的婴儿咳嗽怎么办 50天的婴儿咳嗽怎么办 宝宝20天感冒了怎么办 1个月宝宝咳嗽怎么办 40天的宝宝干咳怎么办 百天的宝宝咳嗽怎么办 50天的孩子咳嗽怎么办 百天宝宝咳嗽有痰怎么办 1岁半宝宝拉肚子怎么办 百天的宝宝拉肚子怎么办 激战2帧数三十多怎么办 太受欢迎了怎么办txt微 太受欢迎了怎么办网盘 太受欢迎了怎么办微盘 我太受欢迎了该怎么办h 我太受欢迎了该怎么办1 卡培他滨副作用怎么办 究极风暴4卡怎么办 脸下垂法令纹深怎么办 20岁有法令纹怎么办 3个月婴儿铅超标怎么办 一岁宝宝铅超标怎么办 小樱死了 佐助怎么办 平板玩游戏闪退怎么办 手机玩游戏闪退怎么办 天天爱消除闪退怎么办 半夜牙疼的厉害怎么办 心眼特别小的人怎么办 自己心眼太小了怎么办 我心眼小爱生气怎么办 公章颜色不红了怎么办 香港逗留超过7天怎么办