94. 二叉树的中序遍历
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
输入:root = [1,2]
输出:[2,1]
示例 5:
输入:root = [1,null,2]
输出:[1,2]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
代码
递归
/**
* 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 inOrder(struct TreeNode* root, int* res, int* returnSize) {
if (root == NULL)
return;
inOrder(root->left, res, returnSize);//左
res[(*returnSize)++] = root->val;//中
inOrder(root->right, res, returnSize);//右
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int* res = (int*)malloc(sizeof(int) * 100);
*returnSize = 0;
inOrder(root, res, returnSize);
return res;
}
迭代
/**
* 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().
*/
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int* res = (int*)malloc(sizeof(int) * 100);
*returnSize = 0;
struct TreeNode* tree[100], *cur;
int top = 0;
cur = root;
while (cur != NULL || top != 0) {
if (cur != NULL) {//向左走到底
tree[top++] = cur;
cur = cur->left;
}
else {//cur 是空指针,代表走到了数的端点
cur = tree[--top];
res[(*returnSize)++] = cur->val;//数值入栈
cur = cur->right;
}
}
return res;
}