赞
踩
1、完全二叉树
2、满二叉树
3、扩充二叉树
4、平衡二叉树
遍历方式
1 2 3 4 5 6 0 0 0 7 8 0 9 0 0 0 0 0 0
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
struct BTreeNode{
int data = 0;
BTreeNode *left;
BTreeNode *right;
};
class BTree{
public:
//传参需要注意,二叉树是指针类型的,节点本身就是一个指针:*node。所以需要二级指针才能改变二叉树的内容
//按前序创建二叉树
void create(BTreeNode* &Node){
int data;
cin >> data;
if(data){
Node = new BTreeNode;
Node->data = data;
//cout<<"data:"<<data<<endl;
create(Node->left);
create(Node->right);
} else{
Node=NULL;
}
}
//按层创建二叉树
void levelCreate(BTreeNode* &Node){
queue <BTreeNode*> que;
int data;
cin>>data;
if(data){
Node = new BTreeNode;
Node->data = data;
que.push(Node);
} else{
Node = NULL;
return;
}
while(!que.empty()){
BTreeNode *node = que.front();//取先进入的
que.pop();
//输入左边数据
cin>>data;
if(data){
node->left = new BTreeNode;
node->left->data = data;
que.push(node->left);
} else{
node->left = NULL;
}
//输入右边数据
cin >>data;
if(data){
node->right = new BTreeNode;
node->right->data = data;
que.push(node->right);
} else{
node->right = NULL;
}
}
}
//1 2 3 4 5 6 0 0 0 7 8 0 9 0 0 0 0 0 0
//清除链表
void clear(BTreeNode*& Node){
BTreeNode *p = Node;
if(p != NULL){
clear(Node->left);
clear(Node->right);
delete p;
}
}
//前序遍历(根左右)
void preorderTree(BTreeNode* Node){
if(Node!=NULL){
cout<<Node->data<<" ,";
preorderTree(Node->left);
preorderTree(Node->right);
}
}
//中序遍历(左中右)
void inorderTree(BTreeNode* Node){
if(Node != NULL){
inorderTree(Node->left);
cout<<Node->data<<" ,";
inorderTree(Node->right);
}
}
//后序遍历(左右中)
void postorderTree(BTreeNode* Node){
if(Node != NULL){
postorderTree(Node->left);
postorderTree(Node->right);
cout<<Node->data<<" ,";
}
}
//层序遍历
void levelTree(BTreeNode *Node){
queue<BTreeNode*> que;
if(Node == NULL) return;
else{
que.push(Node);
while(!que.empty()){
BTreeNode *node = que.front();
cout<<node->data<<" ";
que.pop();
if(node->left != NULL){
que.push(node->left);
}
if(node->right!=NULL){
que.push(node->right);
}
}
}
}
//二叉树深度
int depthOfTree(BTreeNode* Node){
if(Node){
return max(depthOfTree(Node->left),depthOfTree(Node->right))+1;
} else{
return 0;
}
}
//返回节点总数目
int getNodeNum(BTreeNode* Node){
if(Node){
return 1+getNodeNum(Node->left)+getNodeNum(Node->right);
} else{
return 0;
}
}
//返回叶子节点
int getLeafNum(BTreeNode* Node){
if(!Node){
return 0;
} else if(Node->left == NULL && Node->right == NULL){
return 1;
} else{
return getLeafNum(Node->left)+getLeafNum(Node->right);
}
}
};
int main(){
BTree tree;
BTreeNode *root;
//tree.create(root);
tree.levelCreate(root);//按层创建
cout<<"pre :";//前序
tree.preorderTree(root);
cout<<endl;
cout<<"in :";//中序
tree.inorderTree(root);
cout<<endl;
cout<<"post:";//后序
tree.postorderTree(root);
cout<<endl;
cout<<"level:";//层序
tree.levelTree(root);
cout<<endl;
cout<<"NodeNum:"<<tree.getNodeNum(root)<<",depth:"<<tree.depthOfTree(root)<<",leaf:"<<tree.getLeafNum(root)<<endl;
tree.clear(root);//清除
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。