- 先序遍历:根-左-右
- 中序遍历:左-根-右
- 后序遍历:左-右-根
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;
}