2022年6月26日leetcode每日一题打卡——94.二叉树的中序遍历

一、题目描述和要求

94. 二叉树的中序遍历 - 力扣(LeetCode)

题目描述

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

示例

示例1:

d8e3fdd5244b4e838370fbed78c59d5e.png

输入:root = [1,null,2,3]
输出:[1,3,2]

 示例2:

输入:root = []
输出:[]

示例3:

输入:root = [1]
输出:[1]

提示

  • 树中节点数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

二、解题思路

总的思路:

对给定的二叉树进行中序遍历,其中空子树用NULL表示,给出根结点root,返回中序遍历结果。对此我们可以采取递归的思想,对二叉树进行遍历,先遍历二叉树的左子树,再输出根结点,最后遍历右子树。此时为了存储中序遍历的结果,首先要申请一个整型数组returnnum用于存储中序遍历结果,由题目提示可知,结点个数在0-100间,对此我们可以申请101个空间,最后一个用于存放结束符。接着判断根结点是否为空,如果为空直接返回NULL,不为空则进入递归遍历函数Traversal,最后返回存储遍历结果的数组returnnum。在Traversal函数中首先要有一个判断结点是否为空的语句,否则对于二叉树的左子树或者右子树为空的结点无法进行处理,而且如果是空结点直接跳过不存入数组,因此return;由于是中序遍历所以先调用函数本身访问左子树,接着将根结点的值存入辅助数组,接着调用函数本身访问右子树,在递归遍历结束之后遍历结果就存到了辅助数组中,函数的参数都是指针的形式,因此是传址,会直接在原本的地址上存储的数据上进行变动。

具体步骤:

1、判断二叉树是否为空树,是则返回NULL
2、对二叉树调用中序递归遍历函数,函数内部对左子树、根的值以及右子树依次进行访问
3、返回存储遍历结果的数组。

注:

遍历二叉树有递归的算法也有非递归算法,除了中序遍历,还有先序和后序遍历,具体算法可以参考:数据结构(C语言版)第六章 树与二叉树_茄味琪琪的博客-CSDN博客

三、具体代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
void Traversal(struct TreeNode *root,int *returnnum,int* returnSize)
{
    if(root==NULL)
    return;
    Traversal(root->left,returnnum,returnSize);
    returnnum[*returnSize]=root->val;
    *returnSize+=1;
    Traversal(root->right,returnnum,returnSize);
}

int* inorderTraversal(struct TreeNode* root, int* returnSize){
    int* returnnum=(int*)malloc(sizeof(int)*101);
    *returnSize=0;
    if(root==NULL)
    return NULL;
    else
    {
        Traversal(root,returnnum,returnSize);
        return returnnum;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_59800431/article/details/125470953