【leetcode】中序遍历二叉树
程序员文章站
2022-05-19 21:03:05
...
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [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;
}
上一篇: Leetcode—中序遍历二叉树
下一篇: 朱元璋为何生生鞭打死朱亮祖?原因是什么?