本文主要是介绍【力扣】94. 二叉树的中序遍历、144. 二叉树的前序遍历、145. 二叉树的后序遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 先序遍历:根-左-右
- 中序遍历:左-根-右
- 后序遍历:左-右-根
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;
}
这篇关于【力扣】94. 二叉树的中序遍历、144. 二叉树的前序遍历、145. 二叉树的后序遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!