94. 二叉树的中序遍历
题目描述
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
提示:
- 树中节点数目在范围 [0, 100] 内
- -100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
解题方法
- C 递归
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ void inorder(struct TreeNode* root, int* res, int* resSize) { if (!root) { return; } inorder(root->left, res, resSize); // 左子树 res[(*resSize)++] = root->val; // 根节点 inorder(root->right, res, resSize); // 右子树 } /** * Note: The returned array must be malloced, assume caller calls free(). */ int* inorderTraversal(struct TreeNode* root, int* returnSize) { int* res = malloc(sizeof(int) * 501); *returnSize = 0; inorder(root, res, returnSize); return res; }
144. 二叉树的前序遍历
题目描述
给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
输入:root = [1,2]
输出:[1,2]
示例 5:
输入:root = [1,null,2]
输出:[1,2]
提示:
- 树中节点数目在范围 [0, 100] 内
- -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
解题方法
- C 递归
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ void preorder(struct TreeNode* root, int* res, int* resSize) { if (!root) { return; } res[(*resSize)++] = root->val; // 根节点 preorder(root->left, res, resSize); // 左子树 preorder(root->right, res, resSize); // 右子树 } /** * Note: The returned array must be malloced, assume caller calls free(). */ int* preorderTraversal(struct TreeNode* root, int* returnSize) { int* res = malloc(sizeof(int) * 501); *returnSize = 0; preorder(root, res, returnSize); return res; }
145. 二叉树的后序遍历
题目描述
给你一棵二叉树的根节点 root
,返回其节点值的 后序 遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[3,2,1]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
提示:
- 树中节点的数目在范围 [0, 100] 内
- -100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
解题方法
- C 递归
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ void postorder(struct TreeNode* root, int* res, int* resSize) { if (!root) { return; } postorder(root->left, res, resSize); // 左子树 postorder(root->right, res, resSize); // 右子树 res[(*resSize)++] = root->val; // 根节点 } /** * Note: The returned array must be malloced, assume caller calls free(). */ int* postorderTraversal(struct TreeNode* root, int* returnSize) { int* res = malloc(sizeof(int) * 501); *returnSize = 0; postorder(root, res, returnSize); return res; }