数据结构

内容由尚学堂java代码模仿而来

#include<iostream>
#include<string>
#include<queue>
using namespace std;
template<typename ElementType>
class Node{
 public:
  ElementType Data;
  Node* Left;
  Node* Right;
  Node(ElementType,Node*,Node*);
};
template<typename ElementType>
Node<ElementType>::Node(ElementType data,Node* left,Node* right)
  :Data(data),Left(left),Right(right){
}
template<typename ElementType>
class Tree{
 protected:
  Node<ElementType>* Root;
 public:
  Tree(Node<ElementType>*);
  bool isEmpty();
  int size();
  int getHeight();
  Node<ElementType>* findKey(ElementType);
  void inOrderTraverse();
  void levelOrderByStack();
 private:
  int size(Node<ElementType>*);
  int getHeight(Node<ElementType>*);
  Node<ElementType>* findKey(ElementType,Node<ElementType>*);
  void inOrderTraverse(Node<ElementType>*);
  void levelOrderByStack(Node<ElementType>*);
};
template<typename ElementType>
void Tree<ElementType>::levelOrderByStack(){
 if(this->Root==NULL){
  cout<<"遍历错误:无数据"<<endl;
  return;
 }
 cout<<"层次遍历:"<<endl;
 this->levelOrderByStack(this->Root);
 cout<<endl;
}
template<typename ElementType>
void Tree<ElementType>::levelOrderByStack(Node<ElementType>* root){
 queue<Node<ElementType>*> Queue;
 Queue.push(root);
 while(Queue.size()!=0){
  for(int i=0;i<Queue.size();i++){
   Node<ElementType>* temp=Queue.front();
   cout<<temp->Data<<" ";
   if(temp->Left!=NULL)
    Queue.push(temp->Left);
   if(temp->Right!=NULL)
    Queue.push(temp->Right);
   Queue.pop();
  }
 }
}
template<typename ElementType>
void Tree<ElementType>::inOrderTraverse(){
 if(this->Root==NULL){
  cout<<"遍历错误:无数据"<<endl;
  return;
 }
 cout<<"中序遍历:"<<endl;
 this->inOrderTraverse(this->Root);
 cout<<endl;
}
template<typename ElementType>
void Tree<ElementType>::inOrderTraverse(Node<ElementType>* root){
 if(root!=NULL){
  this->inOrderTraverse(root->Left);
  cout<<root->Data<<" ";
  this->inOrderTraverse(root->Right);
 }
}
template<typename ElementType>
Node<ElementType>* Tree<ElementType>::findKey(ElementType value){
 return findKey(value,this->Root);
}
template<typename ElementType>
Node<ElementType>* Tree<ElementType>::findKey(ElementType value,Node<ElementType>* root){
 if(root==NULL)
  return NULL;
 else if(root!=NULL&&root->Data==value)
  return root;
 else{
  Node<ElementType>* L=this->findKey(value,root->Left);
  Node<ElementType>* R=this->findKey(value,root->Right);
  if(L!=NULL&&L->Data==value)
   return L;
  else if(R!=NULL&&R->Data==value)
   return R;
  else
   return NULL;
 }
}
template<typename ElementType>
int Tree<ElementType>::getHeight(){
 return this->getHeight(this->Root);
}
template<typename ElementType>
int Tree<ElementType>::getHeight(Node<ElementType>* root){
 if(root==NULL)
  return 0;
 int L=this->getHeight(root->Left);
 int R=this->getHeight(root->Right);
 return L>R? L+1:R+1;
}
template<typename ElementType>
int Tree<ElementType>::size(){
 return size(this->Root);
}
template<typename ElementType>
int Tree<ElementType>::size(Node<ElementType>* root){
 if(root==NULL)
  return 0;
 int L=this->size(root->Left);
 int R=this->size(root->Right);
 return L+R+1;
}
template<typename ElementType>
bool Tree<ElementType>::isEmpty(){
 return this->Root==NULL;
}
template<typename ElementType>
Tree<ElementType>::Tree(Node<ElementType>* root):Root(root){
}
int main(){
 Node<int>f5(5,NULL,NULL);
 Node<int>f4(4,NULL,&f5);
 Node<int>f3(3,NULL,NULL);
 Node<int>f7(7,NULL,NULL);
 Node<int>f6(6,NULL,&f7);
 Node<int>f2(2,&f3,&f6);
 Node<int>f1(1,&f4,&f2);
 Tree<int>btree(&f1);
 cout<<btree.isEmpty()<<endl;
 //中序遍历递归 4513267
 btree.inOrderTraverse();
 //按照层次遍历 借助队列
 btree.levelOrderByStack();
 return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值