二叉树遍历算法集合(前中后序遍历…

总共三个文件,一个头文件,一个对应的cpp文件,还有一个用于测试的文件.

头文件:
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#ifndef BinaryTree_H
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
#define BinaryTree_H
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< stdlib.h >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< stack >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
class BinaryTree
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
private:
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) typedef
int Item;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) typedef
struct TreeNode
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) Item Node;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) TreeNode
* pRight;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) TreeNode
* pLeft;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) TreeNode(Item node
= 0, TreeNode* pright = NULL, TreeNode* pleft = NULL)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) : Node(node)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) , pRight(pright)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) , pLeft(pleft)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }
TreeNode, *PTreeNode;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
public:
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
enum TraverseType
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PREORDER
= 0, // 前序
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
INORDER = 1, // 中序
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
POSTORDER = 2, // 后序
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
LEVELORDER = 3 // 层序
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
};
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) BinaryTree(Item Array[],
int nLength);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
~BinaryTree();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PTreeNode GetRoot()
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return m_pRoot;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 遍历树的对外接口
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 指定遍历类型和是否是非递归遍历,默认是递归遍历
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void Traverse(TraverseType traversetype, bool bRec = true);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
private:
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PTreeNode CreateTreeImpl(Item Array[],
int nLength);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void DetroyTreeImpl(PTreeNode pTreenode);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void PreTraverseImpl(PTreeNode pTreenode); // 递归前序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void InTraverseImpl(PTreeNode pTreenode); // 递归中序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void PostTraverseImpl(PTreeNode pTreenode); // 递归后序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void NoRecPreTraverseImpl(PTreeNode pTreenode); // 非递归前序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void NoRecInTraverseImpl(PTreeNode pTreenode); // 非递归中序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void NoRecPostTraverseImpl(PTreeNode pTreenode); // 非递归后序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void LevelTraverseImpl(PTreeNode pTreenode);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PTreeNode m_pRoot;
// 根结点
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 采用STL里面的stack作为模拟保存链表结点的stack容器
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
typedef std::stack<BinaryTree::PTreeNode> TreeNodeStack;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }
;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
#endif


实现文件:
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< iostream >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< assert.h >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< queue >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
" BinaryTree.h "
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)BinaryTree::BinaryTree(Item Array[],
int nLength)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) : m_pRoot(NULL)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) assert(NULL
!= Array);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) assert(nLength
> 0);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) m_pRoot
= CreateTreeImpl(Array, nLength);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)BinaryTree::
~ BinaryTree()
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) DetroyTreeImpl(m_pRoot);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 按照中序递归创建树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
BinaryTree::PTreeNode BinaryTree::CreateTreeImpl(Item Array[], int nLength)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
int mid = nLength / 2;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PTreeNode p
= new TreeNode(Array[mid]);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (nLength > 1)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) p
->pLeft = CreateTreeImpl(Array, nLength / 2);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) p
->pRight = CreateTreeImpl(Array + mid + 1, nLength / 2 - 1);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return p;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::DetroyTreeImpl(PTreeNode pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL != pTreenode->pLeft)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) DetroyTreeImpl(pTreenode
->pLeft);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL != pTreenode->pRight)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) DetroyTreeImpl(pTreenode
->pRight);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) delete pTreenode;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pTreenode
= NULL;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 遍历树的对外接口
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 指定遍历类型和是否是非递归遍历,默认是递归遍历
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::Traverse(TraverseType traversetype, bool bRec )
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
switch (traversetype)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
case PREORDER: // 前序
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (true == bRec)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "递归前序遍历树\n";
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PreTraverseImpl(m_pRoot);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
else
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "非递归前序遍历树\n";
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NoRecPreTraverseImpl(m_pRoot);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
break;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
case INORDER: // 中序
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (true == bRec)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "递归中序遍历树\n";
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) InTraverseImpl(m_pRoot);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
else
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "非递归中序遍历树\n";
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NoRecInTraverseImpl(m_pRoot);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
break;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
case POSTORDER: // 后序
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (true == bRec)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "递归后序遍历树\n";
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PostTraverseImpl(m_pRoot);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
else
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "非递归后序遍历树\n";
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NoRecPostTraverseImpl(m_pRoot);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
break;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
case LEVELORDER: // 层序
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "层序遍历树\n";
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) LevelTraverseImpl(m_pRoot);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 递归前序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::PreTraverseImpl(PTreeNode pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL == pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pTreenode->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PreTraverseImpl(pTreenode
->pLeft);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PreTraverseImpl(pTreenode
->pRight);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 非递归前序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::NoRecPreTraverseImpl(PTreeNode pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL == pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) TreeNodeStack NodeStack;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PTreeNode pNode;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.push(pTreenode);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
while (!NodeStack.empty())
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
while (NULL != (pNode = NodeStack.top())) // 向左走到尽头
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pNode->Node << std::endl; // 访问当前结点
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
NodeStack.push(pNode->pLeft); // 左子树根结点入栈
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
}
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.pop();
// 左子树根结点退栈
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (!NodeStack.empty())
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode
= NodeStack.top();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.pop();
// 当前结点退栈
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
NodeStack.push(pNode->pRight); // 当前结点的右子树根结点入栈
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
}
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 中序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 中序遍历输出的结果应该和用来初始化树的数组的排列顺序一致
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::InTraverseImpl(PTreeNode pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL == pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL != pTreenode->pLeft)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) InTraverseImpl(pTreenode
->pLeft);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pTreenode->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL != pTreenode->pRight)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) InTraverseImpl(pTreenode
->pRight);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 非递归中序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::NoRecInTraverseImpl(PTreeNode pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL == pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) TreeNodeStack NodeStack;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PTreeNode pNode;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.push(pTreenode);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
while (!NodeStack.empty())
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
while (NULL != (pNode = NodeStack.top())) // 向左走到尽头
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.push(pNode
->pLeft);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.pop();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (!NodeStack.empty() && NULL != (pNode = NodeStack.top()))
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pNode->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.pop();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.push(pNode
->pRight);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 后序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::PostTraverseImpl(PTreeNode pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL == pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL != pTreenode->pLeft)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PostTraverseImpl(pTreenode
->pLeft);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL != pTreenode->pRight)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PostTraverseImpl(pTreenode
->pRight);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pTreenode->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 非递归后序遍历树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::NoRecPostTraverseImpl(PTreeNode pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL == pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) TreeNodeStack NodeStack;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PTreeNode pNode1, pNode2;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.push(pTreenode);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode1
= pTreenode->pLeft;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
bool bVisitRoot = false; // 标志位,是否访问过根结点
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
while (!NodeStack.empty())
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
while (NULL != pNode1) // 向左走到尽头
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.push(pNode1);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode1
= pNode1->pLeft;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode1
= NodeStack.top();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.pop();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL == pNode1->pRight) // 如果没有右子树就是叶子结点
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pNode1->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode2
= pNode1;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode1
= NodeStack.top();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (pNode2 == pNode1->pRight) // 如果这个叶子结点是右子树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pNode1->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.pop();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode1
= NULL;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
else // 否则访问右子树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode1
= pNode1->pRight;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
else // 访问右子树
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (pNode1 == pTreenode && true == bVisitRoot) // 如果已经访问过右子树那么就退出
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pNode1->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
else
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (pNode1 == pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) bVisitRoot
= true;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeStack.push(pNode1);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode1
= pNode1->pRight;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 按照树的层次从左到右访问树的结点
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void BinaryTree::LevelTraverseImpl(PTreeNode pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL == pTreenode)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 层序遍历用于保存结点的容器是队列
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
std::queue<PTreeNode> NodeQueue;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) PTreeNode pNode;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeQueue.push(pTreenode);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
while (!NodeQueue.empty())
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pNode
= NodeQueue.front();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeQueue.pop();
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "Item = " << pNode->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL != pNode->pLeft)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeQueue.push(pNode
->pLeft);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
if (NULL != pNode->pRight)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) NodeQueue.push(pNode
->pRight);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

测试文件:
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
" BinaryTree.h "
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< stdio.h >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< stdlib.h >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< time.h >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)#include
< iostream >
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void DisplayArray( int array[], int length)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
int i;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
for (i = 0; i < length; i++)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) printf(
"array[%d] = %d\n", i, array[i]);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
void CreateNewArray( int array[], int length)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
for (int i = 0; i < length; i++)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法){
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) array[i]
= rand() % 256 + i;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
int main()
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) {
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
int array[10];
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) srand(time(NULL));
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 创建数组
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
CreateNewArray(array, 10);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) DisplayArray(array,
10);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) BinaryTree
*pTree = new BinaryTree(array, 10);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 测试前序遍历
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
pTree->Traverse(BinaryTree::PREORDER);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root = " << pTree->GetRoot()->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root->left = " << pTree->GetRoot()->pLeft->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root->right = " << pTree->GetRoot()->pRight->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pTree
->Traverse(BinaryTree::PREORDER, false);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 测试中序遍历
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
pTree->Traverse(BinaryTree::INORDER);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root = " << pTree->GetRoot()->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root->left = " << pTree->GetRoot()->pLeft->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root->right = " << pTree->GetRoot()->pRight->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pTree
->Traverse(BinaryTree::INORDER, false);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 测试后序遍历
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
pTree->Traverse(BinaryTree::POSTORDER);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root = " << pTree->GetRoot()->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root->left = " << pTree->GetRoot()->pLeft->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) std::cout
<< "root->right = " << pTree->GetRoot()->pRight->Node << std::endl;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) pTree
->Traverse(BinaryTree::POSTORDER, false);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
// 测试层序遍历
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
pTree->Traverse(BinaryTree::LEVELORDER);
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) system(
"pause");
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) delete pTree;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)
return 0;
二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) }

二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)

 

 

 

进化:

 

其实如果不用 Stack 而改用 List 的话,三种非递归遍历将变得更加简单一致,一个 While 就够了

typedef std::list<BinaryTree::PTreeNode> TreeNodeList;

typedef struct TreeNode
{
Item Node;
TreeNode* pRight;
TreeNode* pLeft;
bool bVisited; // 关键

TreeNode(Item node = 0, TreeNode* pright = NULL, TreeNode* pleft = NULL)
: Node(node)
, pRight(pright)
, pLeft(pleft)
, bVisited(false)
{
}

}TreeNode, *PTreeNode;




// 非递归前序遍历树
void BinaryTree::NoRecPreTraverseImpl(PTreeNode pTreenode)
{
if (NULL == pTreenode)
return;

TreeNodeList NodeList;
PTreeNode pNode;
NodeList.push_front(pTreenode);

while (!NodeList.empty())
{
pNode = NodeList.front();
NodeList.pop_front();

std::cout << "Item = " << pNode->Node << std::endl;

if(pNode->pRight != NULL) NodeList.push_front(pNode->pRight);
if(pNode->pLeft != NULL) NodeList.push_front(pNode->pLeft);
}
}


// 非递归中序遍历树
void BinaryTree::NoRecInTraverseImpl(PTreeNode pTreenode)
{
if (NULL == pTreenode)
return;

TreeNodeList NodeList;
PTreeNode pNode;
NodeList.push_front(pTreenode);

while (!NodeList.empty())
{
pNode = NodeList.front();

if(pNode->bVisited)
{
NodeList.pop_front();
pNode->bVisited = false; // 为下一次遍历做准备

std::cout << "Item = " << pNode->Node << std::endl;

if(pNode->pRight != NULL) NodeList.push_front(pNode->pRight);
}
else
{
if(pNode->pLeft != NULL) NodeList.push_front(pNode->pLeft);
pNode->bVisited = true;
}

}
}

// 非递归后序遍历树
void BinaryTree::NoRecPostTraverseImpl(PTreeNode pTreenode)
{
if (NULL == pTreenode)
return;

TreeNodeList NodeList;
PTreeNode pNode;
NodeList.push_front(pTreenode);

while (!NodeList.empty())
{
pNode = NodeList.front();

if(pNode->bVisited)
{
NodeList.pop_front();
pNode->bVisited = false; // 为下一次遍历做准备

std::cout << "Item = " << pNode->Node << std::endl;
}
else
{
if(pNode->pRight != NULL) NodeList.push_front(pNode->pRight);
if(pNode->pLeft != NULL) NodeList.push_front(pNode->pLeft);
pNode->bVisited = true;
}

}
}

 

 

 

 

非递归后续遍历修改为:
public static void iterativePostorder(BinaryTree boot) {
Stack<BinaryTree> stack = new Stack<BinaryTree>();
BinaryTree current, pointer=boot;
boolean bVisitRoot = false;//标志是否访问过根节点
if (boot == null) {
return;
}
stack.push(boot);
current = boot.leftpoiter;
while (!stack.empty()) {
while (current != null) {//向左走到尽头
stack.push(current);
current = current.leftpoiter;
}
current = stack.peek();
stack.pop();
if ((current.rightpoiter == null)||(pointer == current.rightpoiter)) {
visit(current);
pointer = current;
current = stack.peek();
if (pointer == current.rightpoiter) {
visit(current);
stack.pop();
pointer=current;
current = null;
} else {
current = current.rightpoiter;
}
} else {
if (current == boot && (bVisitRoot == true)) {
visit(current);
return;
} else {
if (current == boot) {
bVisitRoot = true;
}
stack.push(current);
current = current.rightpoiter;
}
}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值