美文网首页
二叉树的遍历

二叉树的遍历

作者: __小二杰 | 来源:发表于2016-03-17 19:45 被阅读31次
typedef struct BiTree* Node;

typedef struct BiTree* Tree;

struct BiTree

{

 int Element;

 Node Left;

 Node Right;

 bool isFirst; //从下向上出栈过程中,第一次出现在栈顶

};

 

 

//先序遍历, 递归

void TraverseTreePreOrder(Tree T)

{

 if(T != NULL)

 {

 cout<<T->Element<<" ";

 TraverseTreePreOrder(T->Left);

 TraverseTreePreOrder(T->Right);

 }

}

 

//中序遍历, 递归

void TraverseTreeInOrder(Tree T)

{

 if(T != NULL)

 {

 TraverseTreeInOrder(T->Left);

 cout<<T->Element<<" ";

 TraverseTreeInOrder(T->Right);

 }

}

 

//后序遍历,递归

void TraverseTreePostOrder(Tree T)

{

 if(T != NULL)

 {

 TraverseTreePostOrder(T->Left);

 TraverseTreePostOrder(T->Right);

 cout<<T->Element<<" ";

 }

}

 

//先序遍历. 非递归

void TraverseTreePreOrder2(Tree T)

{

 stack<Node> Stack;

 while(T!= NULL && !Stack.empty()) //每进行一次while,都是从左儿子到右儿子

 {

 while(T != NULL) //一直遍历最左边的节点

 {

 cout<<T->Element<<" ";

 Stack.push(T);

 T = T->Left;

 }

 //如果遍历到底了,就向上一层, 遍历右儿子

 T =Stack.top(); 

 T = T->Right; 

 Stack.pop(); 

 

 }

}

 

//中序遍历, 非递归

void TraverseTreeInOrder2(Tree T)

{

 stack<Node> Stack;

 while(T!= NULL && !Stack.empty())

 {

 while(T != NULL)

 {

 Stack.push(T); 

 T = T->Left;

 }

 T = Stack.top;

 Stack.pop();

 cout<<T->Element<<" ";

 T = T->Right;

 }

}

 

//后序遍历, 非递归

void TraverseTreePostOrder(Tree T)

{

 stack<Node> Stack;

 while(T != NULL && !Stack.empty())

 {

 while(T != NULL)

 {

 Stack.push(T);

 T->isFirst = true; //所有节点在初始入栈时都会在此被设为true.

 T = T->Left;

 }

 T = Stack.top();

 //Stack.pop();

 if(T->isFirst) //左节点被遍历完,准备向右节点遍历时

 {

 T->isFirst = false;

 //Stack.push(T);

 T = T->Right;

 }

 else //右节点被遍历完,又回到这个节点,准备走向父节点

 {

 Stack.pop();

 cout<<T->Element<<" ";

 T = NULL:

 }

 

 }

}

相关文章

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

  • 二叉树遍历

    二叉树 二叉树的存储结构 前序遍历 中序遍历 后序遍历 遍历代码 反转二叉树 深入学习二叉树 二叉树-你必须要懂!...

  • 二叉树操作

    树节点 逐行顺序解析二叉树 前序遍历二叉树 中序遍历二叉树 后序遍历二叉树 删除指定数值的节点 前序遍历顺序存储的...

  • 关于二叉树的算法题

    前序遍历中序遍历后序遍历判断是否是平衡二叉树判断是否是对称二叉树判断二叉树高度按照层遍历二叉树判断二叉树宽度

  • 二叉树三种遍历Swift代码实现

    二叉树的三种遍历 二叉树 前序遍历 中序遍历 后序遍历 另外 不得不说,得到二叉树的前序遍历和中序遍历的结果或者后...

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 二叉树的遍历

    二叉树的遍历 二叉树遍历 分为前序遍历、中序遍历和后序遍历。 前序遍历 (DLR) 先访问根节点,然后前序遍历左子...

  • 数据结构:树的实现和遍历(c++)

    (一)二叉树的遍历——递归实现 二叉树常见的遍历方式分为前序遍历、中序遍历和后序遍历。 1 前序遍历 前序遍历也叫...

  • 二叉树的蛇形层次遍历(LeetCode.103)

    题目 解析 首先参考二叉树的层次遍历层次遍历二叉树(LeetCode--102二叉树的层次遍历)[https://...

  • 算法精选题总结之二叉树类

    1.二叉树的中序遍历中序遍历的迭代方法中序遍历的递归方法2.二叉树前序遍历3.二叉树后续遍历4.二叉树的最近公共祖...

网友评论

      本文标题:二叉树的遍历

      本文链接:https://www.haomeiwen.com/subject/lvuclttx.html