【leetcode】中序遍历二叉树

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

示例:

输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,3,2]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

解题思路:

先用递归的思路写一个代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
    if(root==NULL)//如果根节点为空,那么返回数组为空
    {
        return NULL;
    }
    int leftLen=0,rightLen=0;//分别表示左子树的节点数和右子数的节点数
    int *leftArr=inorderTraversal(root->left,&leftLen);//递归遍历左子树,返回左子树的节点值数组leftArr及其长度leftLen
    int *rightArr=inorderTraversal(root->right,&rightLen);//递归遍历右子树,返回右子树的节点值数组rightArr及其长度rightLen
    *returnSize=leftLen+rightLen+1;//树的全部节点数
    int *arr=(int *)malloc(sizeof(int)*(*returnSize));//存放树的所有节点的val数组
    int i=0,j=0;
    for(i=0;i<leftLen;i++)//左子树的全部节点的val加到返回数组中
    {
        arr[i]=leftArr[i];
    }
    arr[leftLen]=root->val;//根节点的val加到返回数组中
    for(j=0;j<rightLen;j++)//右子数的全部节点的val加到返回数组中
    {
        arr[j+leftLen+1]=rightArr[j];
    }
    free(leftArr);//释放左子树val数组动态分配的空间
    free(rightArr);//释放右子数val数据动态分配的空间
        
    return arr;
}

猜你喜欢

转载自blog.csdn.net/y___y___/article/details/81713196