6--树的遍历

#include <stdio.h>
#define ElemType char

//节点声明,数据域、左孩子指针、右孩子指针
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//先序建立二叉树
BiTree CreateBiTree()
{
    char ch;
    BiTree T;
    scanf("%c",&ch);
    if(ch==‘#‘)
        T = NULL;
    else
    {
        T = (struct BiTNode *)malloc(sizeof(struct BiTNode));
        T->data = ch;
        T->lchild = CreateBiTree();
        T->rchild = CreateBiTree();
    }

    return T;//返回根节点
}
//先序遍历二叉树
void PreOrderTraverse(BiTree T){
    if(T){
       printf("%c",T->data);
       PreOrderTraverse(T->lchild);
       PreOrderTraverse(T->rchild);
    }
}

//中序遍历
void InOrderTraverse(BiTree T){
    if(T){
       PreOrderTraverse(T->lchild);
       printf("%c",T->data);
       PreOrderTraverse(T->rchild);
    }
}
//后序遍历
void PostOrderTraverse(BiTree T){
    if(T)
    {
       PreOrderTraverse(T->lchild);
       PreOrderTraverse(T->rchild);
       printf("%c",T->data);
    }
}
int main()
{
    BiTree T;
    T = CreateBiTree();//建立
    PreOrderTraverse(T);//输出

    return 0;
}
时间: 2024-10-05 11:38:15

6--树的遍历的相关文章

pat L2-006. 树的遍历

L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点的个数.第二行给出其后序遍历序列.第三行给出其中序遍历序列.数字间以空格分隔. 输出格式: 在一行中输出该树的层序遍历的序列.数字间以1个空格分隔,行首尾不得有多余空格. 输入样例: 7 2

一步两步学算法之树的遍历 非递归实现

递归的程序其实我觉得可读性较高  但是执行效率低下 为了做一道PAT的题 去理解了下非递归实现树的遍历 用一个栈来实现 先序遍历 先访问节点 再把节点push进栈 再访问 再push 直到next=NULL 然后pop出一个节点 也就是弹出一个节点 访问它的右边 再弹出 在访问 中序遍历 把左边节点全部push进栈 然后弹出 访问中间 再访问右边  再弹出 一直循环 后序遍历 比较难理解  要入两次栈才能访问 先左边全部入栈  栈顶是左边的元素 此书不能访问 因为右边还没入栈 下面给出先序和后序

树及遍历

节点深度:从根到节点的路径长度,d(root)=0 节点高度:从节点到树叶的最长路径的长,h(leaf)=0 树高为根高,树的深度=树的高度 树的遍历: 递归的前.中.后序还是蛮简单的: 1 //树的遍历 2 void preorder_recursive(PtrToBiNode T){ //二叉树递归先序遍历 3 if (T){ //这句不要忘记 4 printf("%d ", T->Element); 5 preorder_recursive(T->left); 6 p

leetcode404-----简单的树的遍历

Find the sum of all left leaves in a given binary tree. Example: 3 / 9 20 / 15 7 There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24. 题目给出的意思很简单.就只是单纯的树的遍历而已.意思是计算出所有左叶子节点的值的和. 我采用递归的方式表示我的遍历顺序,其实主要的是要理解题目的意思,这里

树的遍历 | Tree Traversal

树的遍历方式总体上有两种:DFS和BFS: 其中DFS包含了前序.中序和后序遍历,而BFS则为层次遍历. DFS的实现方式: (1) 递归: (2) 非递归,使用辅助栈: 递归程序 public class Recursion { public void preorderRec(TreeNode root) { if (root == null) { return; } System.out.println(root.val); // visit the node preorderRec(roo

Codeforces 29D Ant on the Tree 树的遍历 dfs序

题目链接:点击打开链接 题意: 给定n个节点的树 1为根 则此时叶子节点已经确定 最后一行给出叶子节点的顺序 目标: 遍历树并输出路径,要求遍历叶子节点时按照给定叶子节点的先后顺序访问. 思路: 给每个节点加一个优先级. 把最后一个叶子节点到父节点的路径上的点优先级改为1 把倒数第二个叶子节点到父节点的路径上的点优先级改为2 如此每个点就有一个优先级,每个访问儿子节点时先访问优先级大的即可 对于无解的判断:得到的欧拉序列不满足输入的叶子节点顺序即是无解. #include <cstdio> #

那些妖术——树的遍历

这个方法有点邪门,和大家在课堂上学的有点不一样,所以blog的名字取得有点邪乎. 一般的程序员应聘技术类的笔试都会有一道题目,那就是树的遍历(前序遍历,中序遍历和后续遍历).这里教大家玩点新鲜的, 可能和平时大家学的有点不一样.但是绝对是在考场上解决问题的神器,因为一个字快,可以帮你节省时间做其他的题目. 喜欢的小伙伴记得点赞啊.(*^__^*) 一.中序遍历 这个是最简单的,什么是中序遍历,那就是把我们的树压扁了就可以得到我们的中序遍历,所以中序遍历就是DBGEHACIJF. 什么是把树压扁了

分针网——每日分享:MySQL实现树的遍历

更多文章:www.f-z.cn 经常在一个表中有父子关系的两个字段,比如empno与manager,这种结构中需要用到树的遍历.在Oracle 中可以使用connect by简单解决问题,参见http://blog.csdn.net/wzy0623/archive/2007/06/18/1656345.aspx,但MySQL 5.1中还不支持(据说已纳入to do中),要自己写过程或函数来实现. 一.建立测试表和数据 [c-sharp] view plain copy DROP TABLE IF

如果Google面试让你用python写一个树的遍历程序

前几天忽然对python很感兴趣,学了几天也感觉它非常的简洁实用.打破了我这么长时间对java C# C 和vb的审美疲劳,让我眼前一亮."就像读英文一样简单"这句话评价python说的很合理. 我对python的好感很大部分是因为听说google很多程序用python,而且在google app engine里面和支持python.如果你去google面试或者笔试,很可能就会考到这个题:用python实现树的遍历. 自己试着写了一下,不过毕竟是菜鸟,有问题请多多指教. 运行效果如下:

(5)树的分类有哪些,树的遍历——4

树根据树结点的关系不同,可以分为有序树和无序树. 有序树指的是子树的位置自左向右有次序关系的称为有序树,顺序决定了大小,孩子的次序不能改变. 无序树指的是子树的位置自左向右无次序关系. 树的遍历针对树的类型有不同的遍历方式,其遍历方式有深度优先遍历,广度优先遍历. 深度优先遍历先访问根结点,再逐个访问子结点.(ABDECFG) 广度优先遍历就是对树中的结点逐层进行访问.  (ABCDEFG) A B      C D   E  F   G --整理自<C/C++程序员面试宝典>