树的遍历c/c++

先序遍历(递归)
1 void preOrderTraverase(TreeNode * r)
2 {
3 if(r)
4 {
5 printf("%d\t",r->_data);
6 preOrderTraverase(r->_left);
7 preOrderTraverase(r->_right);
8 }
9 }
中序遍历(递归)
1 void midOrderTraverase(TreeNode * r)
2 {
3 if(r)
4 {
5 midOrderTraverase(r->_left);
6 printf("%d\t",r->_data);
7 midOrderTraverase(r->_right);
8 }
9 }
后序遍历(递归)
1 void postOrderTraverase(TreeNode * r)
2 {
3 if(r)
4 {
5 postOrderTraverase(r->_left);
6 postOrderTraverase(r->_right);
7 printf("%d\t",r->_data);
8 }
9 }
层序遍历(用到队列)(递归)
1 void levelOrderTraverse(TreeNode *root)
2 {
3 if(root)
4 {
5 Queue q;
6 initQueue(&q);
7 enQueue(&q,root);
8 while(!isQueueEmpty(&q))
9 {
10 root = deQueue(&q); //根出队
11 printf(" %d ",root->data);
12 if(root->left)enQueue(&q,root->left); //左子树入队
13 if(root->right)enQueue(&q,root->right);//右子树入队
14 }
15 printf("\n");
16 }
17 }
先序遍历(非递归)
1 void preOrderTraverase(TreeNode * r)
2 {
3 if(r)
4 {
5 Stack s;
6 initStack(&s);
7 while(r || !isStackEmpty(&s)) //第一次循环或者栈内不空
8 {
9 while(r)
10 {
11 printf("%d\t",r->_data);//访问结点
12 push(&s,r);
13 r = r->_left; //一直向左并将沿途结点压入堆栈
14 }
15 if(!isStackEmpty(&s))
16 {
17 r = pop(&s); //结点弹出堆栈
18 r = r->_right; //转向右子树
19 }
20 }
21 }
22 }
中序遍历(非递归)
1 void midOrderTraverase(TreeNode * r)
2 {
3 if(r)
4 {
5 Stack s;
6 initStack(&s);
7 while(r || !isStackEmpty(&s))
8 {
9 while(r)
10 {
11 push(&s,r);
12 r = r->_left;
13 }
14 if(!isStackEmpty(&s))
15 {
16 r = pop(&s);
17 printf("%d\t",r->_data);//访问的时机变了
18 r = r->_right;
19 }
20 }
21 }
22 }
后序遍历(非递归)
1 void postOrderTraverse(struct Tree *t)
2 {
3 Stack s; initStack(&s);
4 TreeNode *cur; //当前结点
5 TreeNode *pre=NULL; //前一次访问的结点
6 push(&s,t);
7 while(!isStackEmpty(&s))
8 {
9 cur = pop(&s);
10 push(&s,cur);
11 if((cur->_left==NULL&&cur->_right==NULL)|| (pre!=NULL&&(pre==cur->_left||pre==cur->_right)))
12 { //如果当前结点没有孩子结点或者孩子节点都已被访问过
13 printf("%d\t",cur->_data);
14 pop(&s);
15 pre=cur;
16 }
17 else
18 {
19 if(cur->_right != NULL)
20 push(&s,cur->_right);
21 if(cur->_left != NULL)
22 push(&s,cur->_left);
23 }
24 }
25 }
树的遍历c/c++的更多相关文章
- 数据结构--树(遍历,红黑,B树)
平时接触树还比较少,写一篇博文来积累一下树的相关知识. 很早之前在数据结构里面学的树的遍历. 前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍 ...
- YTU 3023: 树的遍历
原文链接:https://www.dreamwings.cn/ytu3023/2617.html 3023: 树的遍历 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 2 题 ...
- 团体程序设计天梯赛-练习集L2-006. 树的遍历
L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...
- leetcode404-----简单的树的遍历
Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are two l ...
- pat L2-006. 树的遍历
L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...
- L2-006. 树的遍历
题目链接:L2-006. 树的遍历 今天一神给我手敲二叉树模板,瞬间就领悟了,感觉自己萌萌哒! 看上去很直观! #include <iostream> #include <cstdi ...
- js实现对树深度优先遍历与广度优先遍历
深度优先与广度优先的定义 首先我们先要知道什么是深度优先什么是广度优先. 深度优先遍历是指从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点的第一个未被访问的邻结点,然后再以此邻结点为顶点,继续 ...
- L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...
- 团体程序设计天梯赛 L2-006. 树的遍历 L2-011. 玩转二叉树
L2-006. 树的遍历 #include <stdio.h> #include <stdlib.h> #include <string.h> #include & ...
- L2-006 树的遍历 (后序中序求层序)
题目: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数.第二行给出其后序遍历序 ...
随机推荐
- Python3内置类型有哪些?
摘要:Python3目前已经成为主流,和版本2天壤之别,关于Python3的内置类型你了解吗? 本文将专注于解释器支持的内置类型,基于版本3.9.1进行讲解. 内置的主要类型是numerics.seq ...
- A - 规律题
我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示. Input输 ...
- 牛客练习赛53 E-老瞎眼pk小鲜肉(思维+线段树+离线)
前言 听说是线段树离线查询?? 做题做着做着慢慢对离线操作有点感觉了,不过也还没参透,等再做些题目再来讨论离线.在线操作. 这题赛后看代码发现有人用的树状数组,$tql$.当然能用树状数组写的线段树也 ...
- 【noi 2.6_1481】Maximum sum(DP)
题意:求不重叠的2段连续和的最大值. 状态定义f[i]为必选a[i]的最大连续和,mxu[i],mxv[i]分别为前缀和后缀的最大连续和. 注意:初始化f[]为0,而max值为-INF.要看好数据范围 ...
- 【noi 2.6_9283】&【poj 3088】Push Botton Lock(DP--排列组合 Stirling数)
题意:N个编号为1~N的数,选任意个数分入任意个盒子内(盒子互不相同)的不同排列组合数. 解法:综合排列组合 Stirling(斯特林)数的知识进行DP.C[i][j]表示组合,从i个数中选j个数的方 ...
- 01、mysql安装配置
1.下载mysql软件安装包 MySQL版本:5.7.17 mysql下载地址:http://rj.baidu.com/soft/detail/12585.html?ald 2.配置mysql数据库与 ...
- Linux-源码安装及FPM打包
目录 源码安装 制作RPM包(使用FPM工具) 安装rpm后要执行的脚本(优化版) 源码安装 这里举例Nginx的源码安装,需要前往Nginx官网找到稳定版本源码安装包下载. ## 源码安装nginx ...
- System.Windows.Forms.Help
在开发过程中,基本都需要实现帮助功能,而一般帮助功能就是打开一个帮助文档,System.Windows.Forms提供了Help类用于打开帮助文档,挺方便的. Help类提供的方法如下: Name ...
- 鸟哥的linux私房菜——第九章学习(vim编辑器)
第九章vim编辑器 1.0).vi与vim Linux下文本界面的文书编辑器通常会有常常听到的就有: emacs, pico, nano, joe, 与 vim 等等. vi的优势: 所有的 Unix ...
- codeforces 903D
D. Almost Difference time limit per test 2 seconds memory limit per test 256 megabytes input standar ...