C++数据结构学习:二叉树(1)

1.前序遍历

  public:
  
  voidPreOrder(void(*visit)(T&data)=print){PreOrder(root,visit);}
  
  private:
  
  voidPreOrder(BTNode*p,void(*visit)(T&data))
  
  {
  
  if(p){visit(p->data);PreOrder(p->left,visit);PreOrder(p->right,visit);}
  
  }
  
  2.中序遍历
  
  public:
  
  voidInOrder(void(*visit)(T&data)=print){InOrder(root,visit);}
  
  private:

  voidInOrder(BTNode*p,void(*visit)(T&data))

  {

  if(p){InOrder(p->left,visit);visit(p->data);InOrder(p->right,visit);}

  }

  3.后序遍历

  public:

  voidPostOrder(void(*visit)(T&data)=print){PostOrder(root,visit);}

  private:

  voidPostOrder(BTNode*p,void(*visit)(T&data))

  {

  if(p){PostOrder(p->left,visit);PostOrder(p->right,visit);visit(p->data);}

  }

  4.层次遍历
  
  voidLevelOrder(void(*visit)(T&data)=print)

  {
  
  queue*>a;BTNode*p=root;//记得#include
  
  while(p)
  
  {
  
  visit(p->data);
  
  if(p->left)a.push(p->left);if(p->right)a.push(p->right);
  
  if(a.empty())break;p=a.front();a.pop();
  
  }
  
  }
  
  附注:缺省的visit函数print如下
  
  private:
  
  staticvoidprint(T&data){cout<  
  5.不用栈的非递归中序遍历

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C & C++] 的这些文章也感兴趣:

Ogre新加FrameListener.frameRenderingQueued分析
C++中用vectors改进内存的再分配
C语言之编译器引出的问题详解
利用C++语言设计可扩展线程池
C#轻松解决世纪迷题
C++数据结构学习:事件驱动模拟
Symbian编程总结-基础篇-活动对象正解(2)-使用活动对象
PE文件格式详解(3)
C语言程序设计基础之预处理
C++基础:常量成员函数特殊说明