C++数据结构--二叉树的前序遍历,中序遍历,后序遍历
2013-08-01 08:14
302 查看
1.二叉树的抽象模型和相应的node对象表示
2.遍历二叉树
Example:对下图给出的二叉树进行前,中,后序遍历结果
本示例所用到的二叉树
实现代码:
template<typename T>
class node
{
public:
T val; //节点值
node<T>* left;
//左节点
node<T>* right; //右节点
node():val(T()),left(nullptr),right(nullptr){}
node(T v, node<T>* l=nullptr, node<T>* r=nullptr):val(v),left(l),right(r){}
};
node<char>* createBTree()
//构建一棵示例二叉树
{
node<char>* d=new node<char>('D');
node<char>* e=new node<char>('E');
node<char>* b=new node<char>('B',nullptr,d);
node<char>* c=new node<char>('C',e,nullptr);
node<char>* a=new node<char>('A',b,c);
}
void preOrderTravel(node<char>* root)
//前序遍历
{
if(!root)
//根节点为空时结束递归
{
return;
}
else
{
cout<<root->val<<ends;
preOrderTravel(root->left);
//递归遍历左子树
preOrderTravel(root->right);
//递归遍历右子树
}
}
void inOrderTravel(node<char>* root)
{
if(!root)
//根节点为空时结束递归
{
return;
}
else
{
inOrderTravel(root->left);
cout<<root->val<<ends;
inOrderTravel(root->right);
}
}
void postOrderTravel(node<char>* root)
{
if(!root)
//根节点为空时结束递归
{
return;
}
else
{
postOrderTravel(root->left);
postOrderTravel(root->right);
cout<<root->val<<ends;
}
}
int main()
{
node<char>* root=createBTree();
cout<<"preOrderTravel :" ;
preOrderTravel(root);
cout<<endl;
cout<<"inOrderTravel :" ;
inOrderTravel(root);
cout<<endl;
cout<<"postOrderTravel :" ;
postOrderTravel(root);
cout<<endl;
return 0;
}
运行结果:
解析:以后序遍历为例,前序和中序遍历类似
2.遍历二叉树
Example:对下图给出的二叉树进行前,中,后序遍历结果
本示例所用到的二叉树
实现代码:
template<typename T>
class node
{
public:
T val; //节点值
node<T>* left;
//左节点
node<T>* right; //右节点
node():val(T()),left(nullptr),right(nullptr){}
node(T v, node<T>* l=nullptr, node<T>* r=nullptr):val(v),left(l),right(r){}
};
node<char>* createBTree()
//构建一棵示例二叉树
{
node<char>* d=new node<char>('D');
node<char>* e=new node<char>('E');
node<char>* b=new node<char>('B',nullptr,d);
node<char>* c=new node<char>('C',e,nullptr);
node<char>* a=new node<char>('A',b,c);
}
void preOrderTravel(node<char>* root)
//前序遍历
{
if(!root)
//根节点为空时结束递归
{
return;
}
else
{
cout<<root->val<<ends;
preOrderTravel(root->left);
//递归遍历左子树
preOrderTravel(root->right);
//递归遍历右子树
}
}
void inOrderTravel(node<char>* root)
{
if(!root)
//根节点为空时结束递归
{
return;
}
else
{
inOrderTravel(root->left);
cout<<root->val<<ends;
inOrderTravel(root->right);
}
}
void postOrderTravel(node<char>* root)
{
if(!root)
//根节点为空时结束递归
{
return;
}
else
{
postOrderTravel(root->left);
postOrderTravel(root->right);
cout<<root->val<<ends;
}
}
int main()
{
node<char>* root=createBTree();
cout<<"preOrderTravel :" ;
preOrderTravel(root);
cout<<endl;
cout<<"inOrderTravel :" ;
inOrderTravel(root);
cout<<endl;
cout<<"postOrderTravel :" ;
postOrderTravel(root);
cout<<endl;
return 0;
}
运行结果:
解析:以后序遍历为例,前序和中序遍历类似
相关文章推荐
- C++实现二叉树 前序遍历, 后序遍历, 中序遍历, 层序遍历(不用递归)
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- 二叉树的前序遍历,中序遍历,后序遍历以及相互之间的求法
- 已知二叉树的前序遍历,中序遍历,求后序遍历的问题。
- 二叉树的前序遍历、中序遍历、后序遍历概念
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 二叉树的前序遍历、中序遍历和后序遍历的递归和非递归算法
- 二叉树 前序遍历的非递归实现 中序遍历的非递归实现 后序遍历的非递归实现 创建二叉树
- 数据结构——根据后序遍历与中序遍历构建二叉树
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 面试题 二叉树的前序遍历,中序遍历,后序遍历(递归实现)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 二叉树的前序遍历、中序遍历及后序遍历
- LintCode:二叉树的前序遍历、中序遍历、后序遍历
- 剑指offer给定二叉树,求中序遍历的下一个 节点,前序遍历,后序遍历扩展
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- C++实现链式二叉树,操作包括初始化二叉树、前序遍历、中序遍历、后序遍历、层次遍历
- 对于已知二叉树的中序遍历和后序遍历如何求二叉树的的前序遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果