二叉树的基本定义和遍历
2017-11-08 13:12
176 查看
二叉树的基本定义和遍历:
#include<iostream>
using namespace std;
template <class T>
struct TreeNode {
Tdata;
TreeNode<T>*left;
TreeNode<T>*right;
TreeNode(constT &data=0)
:data(data)
,left(NULL)
,right(NULL)
{}
};
template <class T>
class BinaryTree {
typedefTreeNode<T> Node;
private:
Node*root;
private:
Node*CreateTree(const T *arr, const int &len, const T &inval, int &i)
{
Node*cur = NULL;
if(arr[i] == inval || i >= len)
{
returncur;
}
cur= new Node(arr[i]);
cur->left= CreateTree(arr, len,inval, ++i);
cur->right= CreateTree(arr, len,inval, ++i);
returncur;
}
voidpreorder(Node *cur)
{
if(cur == NULL)
{
return;
}
cout<< cur->data << " ";
preorder(cur->left);
preorder(cur->right);
}
voidinorder(Node *cur)
{
if(cur == NULL)
{
return;
}
inorder(cur->left);
cout<< cur->data << " ";
inorder(cur->right);
}
voidlastorder(Node *cur)
{
if(cur == NULL)
{
return;
}
lastorder(cur->left);
lastorder(cur->right);
cout<< cur->data << " ";
}
public:
BinaryTree()
:root(NULL)
{}
BinaryTree(constT *arr,const int &len,const T &inval)
{
inti = 0;
root= CreateTree(arr, len, inval, i);
}
void_preorder()//前序遍历
{
preorder(root);
}
void_inorder()//中序遍历
{
inorder(root);
}
void_lastorder()//后序遍历
{
lastorder(root);
}
4000
};
void testTree()
{
intarr[] = { 25,56,17,'#','#',26,'#','#',15,32,89,'#','#',66,};
BinaryTree<int>Tree(arr,sizeof(arr)/sizeof(arr[0]),'#');
Tree._preorder(); cout << endl;
Tree._inorder(); cout << endl;
Tree._lastorder(); cout << endl;
}
int main()
{
testTree();
return 0;
}
#include<iostream>
using namespace std;
template <class T>
struct TreeNode {
Tdata;
TreeNode<T>*left;
TreeNode<T>*right;
TreeNode(constT &data=0)
:data(data)
,left(NULL)
,right(NULL)
{}
};
template <class T>
class BinaryTree {
typedefTreeNode<T> Node;
private:
Node*root;
private:
Node*CreateTree(const T *arr, const int &len, const T &inval, int &i)
{
Node*cur = NULL;
if(arr[i] == inval || i >= len)
{
returncur;
}
cur= new Node(arr[i]);
cur->left= CreateTree(arr, len,inval, ++i);
cur->right= CreateTree(arr, len,inval, ++i);
returncur;
}
voidpreorder(Node *cur)
{
if(cur == NULL)
{
return;
}
cout<< cur->data << " ";
preorder(cur->left);
preorder(cur->right);
}
voidinorder(Node *cur)
{
if(cur == NULL)
{
return;
}
inorder(cur->left);
cout<< cur->data << " ";
inorder(cur->right);
}
voidlastorder(Node *cur)
{
if(cur == NULL)
{
return;
}
lastorder(cur->left);
lastorder(cur->right);
cout<< cur->data << " ";
}
public:
BinaryTree()
:root(NULL)
{}
BinaryTree(constT *arr,const int &len,const T &inval)
{
inti = 0;
root= CreateTree(arr, len, inval, i);
}
void_preorder()//前序遍历
{
preorder(root);
}
void_inorder()//中序遍历
{
inorder(root);
}
void_lastorder()//后序遍历
{
lastorder(root);
}
4000
};
void testTree()
{
intarr[] = { 25,56,17,'#','#',26,'#','#',15,32,89,'#','#',66,};
BinaryTree<int>Tree(arr,sizeof(arr)/sizeof(arr[0]),'#');
Tree._preorder(); cout << endl;
Tree._inorder(); cout << endl;
Tree._lastorder(); cout << endl;
}
int main()
{
testTree();
return 0;
}
相关文章推荐
- 二叉树的基本操作(定义、遍历、高度、生成)【数据结构】
- 数据结构类型定义及基本操作汇总(二)-- 二叉树及其遍历
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现
- 二叉树与其基本递归操作:创建、遍历、特征量计算等
- 二叉树的基本知识以及各种遍历(Java)
- 二叉树的基本操作(一)——二叉树的遍历
- Python二叉树定义与遍历方法实例分析
- Python二叉树的定义及常用遍历算法分析
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- (二)二叉树的抽象数据类型定义及遍历
- 二叉树(1)基本概念以及三种遍历
- C二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 树(1)--树和二叉树的基本定义
- 二叉树的定义与基本操作
- 二叉树基本操作 遍历
- 【C++】 二叉树的基本知识及其遍历
- 二叉树基本操作--创建,三种遍历,叶子节点
- 数据结构-树-二叉树-定义,遍历
- 二叉树的先序、中序、后序遍历等基本操作c++实现
- c语言描述的二叉树的基本操作(层序遍历,递归,非递归遍历)