递归

#include <cstdio>
#define MAX 10000
#define NIL -1
using namespace std;struct node{int parent;int left;int right;
};node binaryTree[MAX];int n;//前序遍历
void preParse(int u){if(u == NIL)return;printf(" %d",u);preParse(binaryTree[u].left);preParse(binaryTree[u].right);
}//中序遍历
void inParse(int u){if(u==NIL)return;inParse(binaryTree[u].left);printf(" %d",u);inParse(binaryTree[u].right);
}//后序遍历
void postParse(int u){if(u==NIL)return;postParse(binaryTree[u].left);postParse(binaryTree[u].right);printf(" %d",u);
}//层次遍历
void levelOrder(){queue<node*> q;q.push(root);node* tem;while(!q.empty()){tem=q.front();printf("%d ",tem->key);q.pop();if(tem->left)q.push(tem->left);if(tem->right)q.push(tem->right);}
}int main(){int i;int value;int left;int right;int root;scanf("%d",&n);for(i=0;i<n;i++)binaryTree[i].parent=NIL;for(i=0;i<n;i++){scanf("%d %d %d",&value,&left,&right);binaryTree[value].left=left;binaryTree[value].right=right;if(left!=NIL)binaryTree[left].parent=value;if(right!=NIL)binaryTree[right].parent=value;}for(i=0;i<n;i++){if(binaryTree[i].parent==NIL)root=i;}printf("Preorder\n");preParse(root);printf("\n");printf("Inorder\n");inParse(root);printf("\n");printf("Postorder\n");postParse(root);printf("\n");
}

非递归

inline void preorder(node* p){stack<node*> w;do{while(p){printf("%d ",p->key);w.push(p);p=p->left;}if(!w.empty()){p=w.top();w.pop();p=p->right;}}while(p||!w.empty());
}inline void inorder(node* p){stack<node*> w;do{while(p){w.push(p);p=p->left;}if(!w.empty()){p=w.top();printf("%d ",p->key);w.pop();p=p->right;}}while(p||!w.empty());
}
//只能遍历一次,不推荐使用
inline void postorder(node* p){stack<node*> w;do{while(p){w.push(p);p=p->left;}if(!w.empty()){p=w.top();if(p->right&&!p->right->visited)p=p->right;else{printf("%d ",p->key);p->visited=true;w.pop();p=NULL;}}}while(p||!w.empty());
}
//推荐使用
inline void postorder(node* p){stack<node*> w;node* pre=NULL;w.push(p);while(!w.empty()){p=w.top();if(p){if((!p->left)&&(!p->right)||(pre&&(pre==p->left||pre==p->right))){printf("%d ",p->key);w.pop();pre=p;}else{if(p->right)w.push(p->right);if(p->left)w.push(p->left);}}}
}

树的遍历 ALDS1_7_C: Tree Walk相关推荐

  1. 第八章 ALDS1_7_C:Tree Walk 树的遍历

    知识点 树的遍历方法:前序遍历,中序遍历和后序遍历 前序遍历 按照根结点.左子树.右子树的顺序输出结点编码. 中序遍历 按照左子树.根结点.右子树的顺序输出结点编码. 后序遍历 按照左子树.右子树.根 ...

  2. LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法

    LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...

  3. tree traversal (树的遍历) - postorder traversal (后序遍历)

    tree traversal (树的遍历) - postorder traversal (后序遍历) 1. tree traversal - 树的遍历 二叉树的遍历 (traversing binar ...

  4. tree traversal (树的遍历) - preorder traversal (前序遍历)

    tree traversal (树的遍历) - preorder traversal (前序遍历) 1. tree traversal - 树的遍历 二叉树的遍历 (traversing binary ...

  5. tree traversal (树的遍历) - inorder traversal (中序遍历)

    tree traversal (树的遍历) - inorder traversal (中序遍历) 1. tree traversal - 树的遍历 二叉树的遍历 (traversing binary ...

  6. tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历

    tree traversal (树的遍历) - 层序遍历 (level order traversal) - 二叉树的层序遍历 1. tree traversal (树的遍历) 1.1 深度优先搜索 ...

  7. LeetCode总结 -- 树的遍历篇

    遍历树的数据结构中最常见的操作. 能够说大部分关于树的题目都是环绕遍历进行变体来解决的. 一般来说面试中遇到树的题目是用递归来解决的, 只是假设直接考察遍历. 那么一般递归的解法就过于简单了. 面试官 ...

  8. LSM树(Log-Structured Merge Tree)存储引擎

    LSM树(Log-Structured Merge Tree)存储引擎 代表数据库:nessDB.leveldb.hbase等 核心思想的核心就是放弃部分读能力,换取写入的最大化能力.LSM Tree ...

  9. 数据结构思维 第六章 树的遍历

    第六章 树的遍历 原文:Chapter 6 Tree traversal 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 本章将介绍一个 Web 搜索引擎,我们将在本书其余部分开 ...

  10. L2-006 树的遍历-团体程序设计天梯赛GPLT

    题目来源:团体程序设计天梯赛-练习集 题目地址:L2-006 树的遍历 题目大意 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 预备知识: 中序遍历 ...

最新文章

  1. oauth过滤login_OAuth2AuthenticationProcessingFilter资源认证服务器过滤器
  2. python pattern_python-patterns:python风格的设计模式
  3. Selector SelectionKey
  4. 强化学习之基于伪计数的探索算法
  5. ASP.NET面试题目大全(非常经典、吐血推荐)
  6. Permission denied (publickey). fatal: Could not read from remote repository.
  7. 【pyradiomics学习】——安装pyradiomics以及简单示例
  8. C#LeetCode刷题之#700-二叉搜索树中的搜索(Search in a Binary Search Tree)
  9. Nginx在Linux下的安装部署
  10. 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
  11. 南阳理工ACM 28大数阶乘
  12. 社团挖掘算法——BGLL算法
  13. Markdown基础语法详细版
  14. 计算机电源 通电,笔记本电脑开不了机,通电后电源指示灯不亮
  15. 攀升笔记本电脑P1X Deepin20.3安装 RTL8821CE RTL8152无线网卡驱动
  16. shiny | 使用R创建一个网页应用(Web App)
  17. paradigm画时序图 visual_Visual Paradigm使用技巧:从用户故事中生成序列图
  18. oracle期末考试参考答案
  19. 【总结-学习-提升】web应用为什么需要tomcat容器
  20. win7 安装深度linux系统安装教程,深度技术win7旗舰版linux虚拟机安装教程

热门文章

  1. 2022秋软工实践 团队展示与选题报告
  2. MySQL重复数据排序_排序数据以在MySQL中重复记录
  3. oracle 提取重复数据,oracle里面查询重复数据的方法
  4. java 汇率转换_汇率转换 实现了一个用于多币种之间汇率转换的程序 联合开发网 - pudn.com...
  5. AXI总线简介(二)
  6. Web服务器过载的情况
  7. STM32 MDK片外FLASH下载算法制作 —— 基于QSPI(W25Q32)
  8. 【VMware vSphere】Veeam备份
  9. 数学基础 —— 旋转(2D 正旋转)
  10. 学习笔记 Tianmao 篇 fresco 图片缓存加载框架