美文网首页
算法应用-二叉树层次遍历

算法应用-二叉树层次遍历

作者: Sweet丶 | 来源:发表于2020-09-30 09:39 被阅读0次

对于一个二叉树结构,请写代码实现传入一个二叉树的根节点,按层次顺序输出二叉树各个节点:

二叉树.png 输出:ABCDEFG.

方法一:从根节点开始加入一个队列,每次让节点的左右孩子依次加入队列中,最后输出队列里面的内容。队列是先进先出的,所以是可以实现按顺序输出。代码如下:

typedef struct TreeNode{
    struct TreeNode *left;
    struct TreeNode *right;
    char val;
}BiTreeNode, *binTree;

typedef struct queue{
    struct TreeNode *nodeQueue[100];
    int front, rear;
}Queue;

Queue q;

// 按照前序遍历的方式输入,遇到没有左孩子和右孩子用空格代替
void createTree(binTree *root){
    char input;
    scanf("%c", &input);
    if (input == ' ') {
        root = NULL;
        return;
    }
    *root = (struct TreeNode *)malloc(sizeof(struct TreeNode));
    (*root)->val = input;
    createTree(&(*root)->left);
    createTree(&(*root)->right);
}

void initializeQueue(){
    q.front = 0;
    q.rear = 0;
}

void push(struct TreeNode* root){
    q.nodeQueue[++q.rear] = root;
}

struct TreeNode * pop(){// 从front读出一个来。
    return q.nodeQueue[++q.front];
}

int empty(){
    return q.front == q.rear;
}


void levelOrderTraversal(struct TreeNode *root){//二叉树的层次遍历
    if (root == NULL) {
        return;
    }
    struct TreeNode *temp;
    push(root);
    while (!empty()) {
        temp = pop();
        printf("%c ", temp->val);
        
        if (temp->left) {
            push(temp->left);
        }
        if (temp->right) {
            push(temp->right);
        }
    }
}

// 
int main(int argc, const char * argv[]) {
    printf("请输入二叉树:");
    binTree root = NULL;
    createTree(&root);
    
    initializeQueue();
    
    printf("二叉树层序遍历的结果:");
    levelOrderTraversal(root);
    return 0;
}

方法二:一次将每个节点的左右孩子加到一个数组中。代码如下:

void levelOrderTraversal2222(struct TreeNode *root){//二叉树的层次遍历
    if (root == NULL) {
        return;
    }
    
    struct TreeNode *arr[100];
    int arr_index = 0;
    arr[arr_index++] = root;
    
    int arr_front = 0;
    while (arr_front != arr_index) {
        
        struct TreeNode *curNode = arr[arr_front++];
        printf("%c", curNode->val);
        if (curNode->left) {
            arr[arr_index++] = curNode->left;
        }
        if (curNode->right) {
            arr[arr_index++] = curNode->right;
        }
    }
}

相关文章

  • 每日Leetcode—算法(10)

    100.相同的树 算法: 101.对称二叉树 算法: 104.二叉树的最大深度 算法: 107.二叉树的层次遍历 ...

  • 二叉树的蛇形层次遍历(LeetCode.103)

    题目 解析 首先参考二叉树的层次遍历层次遍历二叉树(LeetCode--102二叉树的层次遍历)[https://...

  • 二叉树遍历

    二叉树遍历(非递归写法) 先序遍历 中序遍历 后序遍历 层次遍历 给定一个二叉树,返回其按层次遍历的节点值。 (即...

  • 算法应用-二叉树层次遍历

    对于一个二叉树结构,请写代码实现传入一个二叉树的根节点,按层次顺序输出二叉树各个节点: 方法一:从根节点开始加入一...

  • 二叉树的基本算法

    一、二叉树的递归遍历 二、二叉树的层次遍历 二叉树的层次遍历是指二叉树从上到下,从左到右遍历数据。同一层中的节点访...

  • 2018-11-19

    二叉树的层次遍历需要借助队列才可以成功编写程序,先序中序和后序遍历都是用递归来写算法。

  • 二叉树的层次遍历

    三道层次遍历题,同一个模板,这边用到的是两个队列 二叉树的层次遍历 LeetCode题目地址 二叉树的层次遍历 加...

  • 数据结构题目43:二叉树的层次遍历(非递归)

    题目:若二叉树为二叉链表存储结构,写出二叉树的层次遍历的非递归算法。 解题思路:算法中采用一个顺序存储结构队列QU...

  • 二叉树的层次遍历

    一、二叉树的层次遍历原理 如图所示为二叉树的层次遍历,即按照箭头所指方向,按照1、2、3、4的层次顺序,对二叉树中...

  • 二叉树 基础操作

    二叉树的使用 二叉树结构 先序创建二叉树 DFS 先序遍历二叉树 中序遍历二叉树 后序遍历二叉树 BFS 层次遍历...

网友评论

      本文标题:算法应用-二叉树层次遍历

      本文链接:https://www.haomeiwen.com/subject/onpyuktx.html