小甲鱼数据结构和算法-----二叉树的构建和前序遍历

题目要求:建立二叉树并输出每个字符所在的层数。如下图要求输出

A 在第一层

B、C 在第二层

D、E在第三层

代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode {
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

// 创建一棵二叉树,约定用户遵照前序遍历的方式输入数据
void CreateBiTree(BiTree *T) {
    char c;
    scanf("%c",&c);

    if ( ‘ ‘ == c ){
        *T = NULL;
    } else {
        *T = (BiTNode *)malloc(sizeof(BiTNode));
        (*T)->data = c;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }
}

void visit(char c,int level) {
    printf("%c 位于第 %d 层 \n",c,level);
}
// 前序遍历二叉树
void PreOrderTraverse(BiTree T, int level) {
    if ( T ) {
        visit(T->data,level);
        PreOrderTraverse(T->lchild,level+1);
        PreOrderTraverse(T->rchild,level+1);
    }
}
int main()
{
    int level = 1;
    BiTree T;
    T = NULL;

    CreateBiTree(&T);
    PreOrderTraverse(T,level);
    return 0;
}

运行结果截图:

时间: 2024-12-25 04:20:51

小甲鱼数据结构和算法-----二叉树的构建和前序遍历的相关文章

线索二叉树的构建和遍历------小甲鱼数据结构和算法

#include <stdio.h> #include <stdlib.h> typedef char ElemType; // 线索存储标志位 // Link(0):表示指向左右孩子的指针 // Thread(1):表示指向前驱后继的线索 typedef enum {Link, Thread} PointerTag; typedef struct BiThrNode { char data; struct BiThrNode *lchild,*rchild; PointerTag

小甲鱼数据结构和算法--马踏棋盘(骑士周游问题)

代码如下: #include<stdio.h> #include<time.h> #define X 5 #define Y 5 int chess[X][Y]; void printChess(){ int i,j; printf("This is horse Chess:\n"); for( i=0;i<X;i++){ for(j=0;j<Y;j++){ printf("%2d\t",chess[i][j]); } print

javascript数据结构与算法--二叉树(插入节点、生成二叉树)

javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ /*用来生成一个节点*/ function Node(data, left, right) { this.data = data;//节点存储的数据 this.left = left; this.right = right; this.show = show; } function sh

[数据结构与算法] 二叉树及其遍历方式

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4289830.html 一.数据结构分类 (一)按逻辑结构 集合(无辑关系) 线性结构(线性表):数组.链表.栈.队列 非线性结构:树.图.多维数组 (二)按存储结构 顺序(数组)储结构.链式储结构.索引储结构.散列储结构 二.二叉树相关性质

数据结构,算法宏观印象构建

前言 这篇文章主要是鸟瞰数据结构和算法,不涉及到具体的细节. 阐述逻辑通过黄金思维圈中的是什么,为什么展开. 内容包括: 什么是数据结构 为什么需要需要数据结构 数据结构分类 什么是算法 为什么需要算法 算法的衡量标准 关于数据结构 什么是数据结构? 逻辑结构:描述数据之间的关系 物理结构:描述数据存储的方式 为什么需要数据结构? 以有效的方式处理数据,主要体现在存储和检索方面. 数据结构的分类 逻辑结构 1,集合结构 例如一个集合中包含橘子,苹果和香蕉. 集合具有三大特性: 唯一性 互斥性 无

数据结构和算法——二叉树

树1.树的优点有序数组: 查找很快,二分法实现的查找所需要的时间为O(logN),遍历也很快,但是在有序数组中插入,删除却需要先 找到位置, 在把数组部分元素后移,效率并不高. 链表: 链表的插入和删除都是很快速的,仅仅需要改变下引用值就行了,时间仅为O(1),但是在链表中查找数据却需要遍历所有的元素, 这个效率有些慢了.树的优点: 树结合了有序数组和链表的优点,可以实现快速的查找,也可以快速的删除,查找. 树的一些专用术语: 路径: 顺着连接节点的边从一个节点到另一个节点的,所经过的所有节点的

python数据结构与算法——二叉树结构与遍历方法

先序遍历,中序遍历,后序遍历 ,区别在于三条核心语句的位置 层序遍历  采用队列的遍历操作第一次访问根,在访问根的左孩子,接着访问根的有孩子,然后下一层 自左向右一一访问同层的结点 # 先序遍历 # 访问结点,遍历左子树,如果左子树为空,则遍历右子树, # 如果右子树为空,则向上走到一个可以向右走的结点,继续该过程 preorder(t):    if t:       print t.value       preorder t.L       preorder t.R # 中序遍历 # 从根

数据结构与算法--二叉树(一)

1 基于二叉链表的有序二叉树 1.1 问题 BST是Binary Search Tree的缩写,译为二叉搜索树,或有序二叉树,是二叉树的一种,它的定义如下: 1)或者是一棵空树: 2)或者是具有下列性质的二叉树: I) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值: II) 若右子树不空,则右子树上所有结点的值均大于它的根结点的值: III)左.右子树也分别为二叉排序树: BST在查找一个结点或插入一个结点时,具有极大的优势,速度非常快.是一种基础性数据结构,广泛应用于更加抽象的集合

数据结构与算法 —— 二叉树

二叉树 定义: 来自于百度百科. 在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被用于实现二叉查找树和二叉堆. 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒.二叉树的第i层至多有2^{i-1}个结点:深度为k的二叉树至多有2^k-1个结点:对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_