二叉树
来源:互联网 发布:js日期转换为数字 编辑:程序博客网 时间:2024/06/02 04:24
一、遍历二叉树
1、前序遍历:根左右
2、中序遍历:左根右
3、后序遍历:左右根
4、层序遍历:一层层
#include"stdafx.h"
#include<iostream>using namespace std;
template<class T>
struct TreeNode
{
T _data;
TreeNode<T>* _left;
TreeNode<T>* _right;
TreeNode(const T& data=0)
:_data(data)
, _left(NULL)
, _right(NULL)
{
}
};
template<class T>
class BinaryTree
{
typedef TreeNode<T> Node;
public:
BinaryTree()
:_root(NULL)
{}
BinaryTree(const T* arr,const int& len,const T& inval)
{
int i = 0;
_root=_CreatTree(arr, len, inval, i);
}
void PreOrder()
{
_PreOrder(_root);
}
void InOrder()
{
_InOrder(_root);
}
void OutOrder()
{
_OutOrder(_root);
}
private:
Node* _CreatTree(const T* arr, const int& len, const T& inval,int& i)
{
Node* cur = NULL;
if (arr[i] == inval || i >= len)
{
return cur;
}
cur =new Node(arr[i]);
cur->_left = _CreatTree(arr, len, inval, ++i);
cur->_right = _CreatTree(arr, len, inval, ++i);
return cur;
}
void _PreOrder(Node* cur)//前序遍历:根左右
{
if (cur == NULL)
{
return;
}
cout << cur->_data << " ";
_PreOrder(cur->_left);
_PreOrder(cur->_right);
}
void _InOrder(Node* cur)//中序遍历:左根右
{
if (cur == NULL)
{
return;
}
_InOrder(cur->_left);
cout << cur->_data << " ";
_InOrder(cur->_right);
}
void _OutOrder(Node* cur)//后序遍历:左右根
{
if (cur == NULL)
{
return;
}
_OutOrder(cur->_left);
_OutOrder(cur->_right);
cout << cur->_data << " ";
}
private:
Node* _root;
};
void TestTree()
{
int arr[] = { 31,23,'#','#',12,56,'#',5,17,78,62,'#','#','#',66,'#',55 };
BinaryTree<int> tree(arr, sizeof(arr) / sizeof(arr[0]), '#');
tree.PreOrder();
cout << endl;
tree.InOrder();
cout << endl;
tree.OutOrder();
}
int main()
{
TestTree();
return 0;
}
阅读全文
0 0
- 二叉树、二叉堆
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- eclipse中设置tomcat内存
- SpringMVC 请求转发区别
- Seaborn学习以及Matplotlib基础(持续更新中...)
- 自勉
- javaWeb之struts四---文件上传篇
- 二叉树
- error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.32/info: open //./pipe/docker_eng
- 运算符(除法)
- CentOS设置IP
- [译文]Android架构组件-App架构指南
- using语句下使用SqlDataReader异常:Invalid attempt to Read when reader is closed
- 内置锁(三)---- synchronized的几个要注意的对象监视器
- mysql常规命令
- VTK 7.1.0+window7_64位+QT5.5配置及第一个实例运行