力扣 - 102、二叉树的层序遍历(剑指Offer - 面试题32:从上到下打印二叉树)

简介: 力扣 - 102、二叉树的层序遍历(剑指Offer - 面试题32:从上到下打印二叉树)

题目

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例:

二叉树:[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7


输出层序遍历的结果

3 9 20 15 7

分析

迭代法

用一个队列来存储当前层数的节点地址,每次从队列头部取出一个节点,然后判断是否为NULL,若不为空则输出当前节点,并把左右子节点存入队列尾部。直到队列中没有元素为止。因为这里拿c语言实现,所以用数组代替队列,

C

#include<stdio.h>
#include<assert.h>
#include<stdbool.h>
#include<stdlib.h>
#define MAXSIZE 100 /* 存储空间初始分配量 */
typedef int TElemType;  /* 树结点的数据类型,目前暂定为整型 */
typedef struct node
{
  TElemType data;
  struct node* lchild, * rchild;//左右孩纸指针
}BTree;
void CreatTree(BTree** T)//构造二叉树
{
  TElemType n = 0;
  scanf("%d", &n);
  if (999 != n)
  {
    (*T) = (BTree*)malloc(sizeof(BTree));
    assert(NULL != *T);
    (*T)->data = n;
    CreatTree(&((*T)->lchild));
    CreatTree(&((*T)->rchild));
  }
  else
  {
    *T = NULL;
  }
}
//层序遍历 迭代法
void sequenceTraversal(BTree* T)
{
  assert(NULL != T);
  BTree* queue[MAXSIZE] = { 0 };
  queue[0] = T;
  int end = 1;
  int start = 0;
  while (start < end)
  {
    T = queue[start];
    start++;
    if (T != NULL)
    {
      printf("%d ", T->data);
      queue[end++] = T->lchild;
      queue[end++] = T->rchild;
    }
  }
}
int main()
{
  BTree* root = NULL;
  printf("请按照先序的规则输入数据:\n");
  CreatTree(&root);
    printf("层序遍历输出:\n");
  sequenceTraversal(root);
    printf("\n");
  return 0;
}

本章完!


目录
相关文章
|
4月前
|
算法
二叉树面试题
本文介绍了二叉树相关的几个经典算法问题。首先讲解了如何判断两棵树是否完全相同(LeetCode 100),并给出了代码示例。接着讨论了如何判断一棵树是否是另一棵树的子树(LeetCode 572),详细分析了子树的定义及判断方法。然后介绍了翻转二叉树(LeetCode 226)的实现方法,即在遍历时交换每个节点的左右子树。随后探讨了如何判断一棵树是否是对称的(LeetCode 101),通过对左右子树的递归比较来实现。最后分析了平衡二叉树的概念(LeetCode 110)及判断方法,并给出了优化后的代码示例。此外,还简要介绍了二叉树遍历及二叉树最近公共祖先(LeetCode 236)的问题
31 6
二叉树面试题
|
3月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
28 2
|
3月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
25 2
|
3月前
【LeetCode 28】102.二叉树的层序遍历
【LeetCode 28】102.二叉树的层序遍历
19 2
|
2月前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
22 0
|
3月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
24 0
|
3月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
20 0
|
3月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
26 0
|
3月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
24 0
|
3月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
19 0

热门文章

最新文章