二叉树的层次遍历和其深度

//二叉树的层次遍历和其深度
#include <cstdio>
#include <cstdlib>
//define _OJ_
#define maxsize 100
typedef struct tree1
{
    char data;
    struct tree1 *lchild;
    struct tree1 *rchild;
} tree1, *tree;

typedef struct queue1
{
    tree data;
    struct queue1 *next;
} queue1, *queue;

typedef struct Linkqueue1
{
    queue front;
    queue rear;
}Linkqueue1, *Linkqueue;

Linkqueue
init_queue(void)
{
    Linkqueue q;
    q = (Linkqueue) malloc (sizeof(Linkqueue1));
    q->front = q->rear = (queue) malloc (sizeof(queue1));
    q->front->next = NULL;
    return q;
}

void
Enqueue(Linkqueue q, tree T)
//将新的节点插入队尾
{
    queue p;
    p = (queue) malloc (sizeof(queue1));
    p->data = T;    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
}

tree
Dequeue(Linkqueue q)
//从队头删除节点
{
    queue p;
    p = q->front->next;
    q->front->next = p->next;
    if(q->rear == p)    q->rear = q->front;
    return p->data;
}

tree
creat_tree(tree T)
{
    char ch;
    scanf("%c", &ch);
    if(ch == ‘#‘)
        T = NULL;
    else
    {
        T = (tree) malloc (sizeof(tree1));
        T->data = ch;
        T->lchild = creat_tree(T->lchild);
        T->rchild = creat_tree(T->rchild);
    }
    return T;
}

int
isempty(Linkqueue q)
{
    if(q->front == q->rear)
        return 1;
    else
        return 0;
}

void
travertree(tree T)
{
    Linkqueue q;
    tree T2;
    q = init_queue();

Enqueue(q,T);
    while ( !isempty(q)) {
        T2 = Dequeue(q);
        printf("%c\n", T2->data);
        if(T2->lchild != NULL)
             Enqueue(q,T2->lchild);
         if(T2->rchild != NULL)
             Enqueue(q,T2->rchild);
    }
}

int
deep(tree T)
{
    int dept = 0;
    if(T)
    {
        int lchild_deep, rchild_deep;
        lchild_deep = deep(T->lchild);
        rchild_deep = deep(T->rchild);
        dept = lchild_deep >= rchild_deep ? (lchild_deep + 1) : (rchild_deep + 1);
    }
    return dept;
}

int main(int argc, char const *argv[]) {
#ifndef _OJ_  //ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
    tree T;
    T = creat_tree(T);
    printf("deep == %d\n", deep(T));
    travertree(T);
    return 0;
}

/*deep == 3
A
B
C
D*/

时间: 2024-10-22 03:24:50

二叉树的层次遍历和其深度的相关文章

重建二叉树与二叉树的层次遍历

数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入数据有多组,第一行是一个整数t (t<1000).代表有t组測试数据.每组包含两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列. 输出 每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列 演示样例输

二叉树的层次遍历(队列) and 二叉搜索树的后序遍历序列

(一)从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印.[层次遍历] 从上到下打印二叉树的规律:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾.接下来到队列的头部取出最早进入队列的节点,重复前面的操作,直至队列中所有的节点都被打印出来为止. //二叉树的层次遍历#include<iostream>#include<queue>using namespace std; typedef int ElemType;typedef st

二叉树的层次遍历 II

二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / 9 20 / 15 7 按照从下往上的层次遍历为: [ [15,7], [9,20], [3] ] 标签 二叉树 队列 二叉树遍历 宽度优先搜索 1 /** 2 * Definition of TreeNode: 3 * class TreeNode { 4 * public: 5 * int

lintcode 中等题:binary tree level order traversal ii 二叉树的层次遍历II

题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / 9 20 / 15 7 按照从下往上的层次遍历为: [ [15,7], [9,20], [3] ] 解题 和上一题的答案反过来 直接每次在list中第一个位置加入当前层结点 /** * Definition of TreeNode: * public class TreeNode { *

二叉树的层次遍历和(叶子)节点

#include<stdio.h> #include<string.h> #include<stdlib.h> #define size 100 #define resize 10 typedef struct Bitnode{ //定义结点 char data; struct Bitnode *lchild,*rchild; }Bitnode,*Bitree; typedef struct { //定义队列 Bitree *base; int front; int r

数据结构——链队列实现二叉树的层次遍历

在二叉树的遍历这篇博客中https://www.cnblogs.com/wkfvawl/p/9901462.html 对于二叉树的层次遍历我只是给出了基于C++ STL的代码,这里我使用数据结构的链表,构建一个链队列来实现.这也算是我第一次使用链队列来完成某个任务,链队列代码还是来自课本,因为之前使用C++ STL时,queue中的某些函数是有返回值的列如Q.front(),而有些却没有返回值像Q.push(p),Q.pop(),就连有没有参数也是不同的,在这里我没有改动课本上的代码来适应自己的

树——二叉树的层次遍历

1,二叉树的遍历: 1,二叉树的遍历(Traversing Binary Tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次: 1,层次就是访问的次序,层次遍历是先访问第一层.再第二层等: 2,考虑的问题: 1,通用树结构的层次遍历算法是否可以用在二叉树结构上?如果可以,代码需要做怎样的改动? 1,可以的,二叉树是一种特别的树: 2,通用树使用的算法可以移植到二叉树使用的场合: 3,设计思路(游标): 1,提供一组遍历相关的函数,按层次访问

PTA 二叉树的层次遍历

6-6 二叉树的层次遍历 (6 分) 本题要求实现给定的二叉树的层次遍历. 函数接口定义: void Levelorder(BiTree T); T是二叉树树根指针,Levelorder函数输出给定二叉树的层次遍历序列,格式为一个空格跟着一个字符. 其中BinTree结构定义如下: typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild, *rchild; }BiTNode, *B

二叉树的层次遍历(BFS)

今日在LeetCode平台上刷到一道Medium难度的题,要求是二叉树的层次遍历.个人认为难度并不应该定在Medium, 应该是Easy比较合适,因为并没有复杂的算法逻辑,也没有corner cases class Solution { public List<List<Integer>> levelOrder(TreeNode root) { //using queue List<List<Integer>> res= new ArrayList<&