二叉树的三种遍历方式
【摘要】 @TOC 二叉树的遍历方式二叉树有三种遍历方式:前序遍历:打印-左-右中序遍历:左-打印-右后序遍历:左-右-打印前序遍历(中左右):5 4 1 2 6 7 8中序遍历(左中右):1 4 2 5 7 6 8后序遍历(左右中):1 2 4 7 8 6 5 前序遍历二叉树的前序遍历void preorder(struct TreeNode* root, int* res, int* resSiz...
@TOC
二叉树的遍历方式
二叉树有三种遍历方式:
前序遍历:打印-左-右
中序遍历:左-打印-右
后序遍历:左-右-打印
前序遍历(中左右):5 4 1 2 6 7 8
中序遍历(左中右):1 4 2 5 7 6 8
后序遍历(左右中):1 2 4 7 8 6 5
前序遍历
void preorder(struct TreeNode* root, int* res, int* resSize) {
if (root == NULL) {
return;
}
res[(*resSize)++] = root->val;
preorder(root->left, res, resSize);
preorder(root->right, res, resSize);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int* res = malloc(sizeof(int) * 2000);
*returnSize = 0;
preorder(root, res, returnSize);
return res;
}
中序遍历
我们来看这个题目:二叉树的中序遍历
题目要求的是中序遍历,那就按照 左-打印-右这种顺序遍历树就可以了,递归函数实现
终止条件:当前节点为空时
函数内:递归的调用左节点,打印当前节点,再递归调用右节点
时间复杂度O(N),空间复杂度O(树的高度)
/**
* 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 Traversal(struct TreeNode* root,int *returnNum,int* returnSize )
{
if(root==NULL)
{
return;
}
//左
Traversal(root->left,returnNum,returnSize);
//根
returnNum[*returnSize] = root->val;
*returnSize = *returnSize + 1;
//右
Traversal(root->right,returnNum,returnSize);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize)
{
//树中节点数目在范围 [0, 100] 内
int *returnNum = (int *)malloc(sizeof(int)*101);
*returnSize = 0;
if(root == NULL)
{
return NULL;
}
Traversal(root,returnNum,returnSize);
return returnNum;
}
后序遍历
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
vec.push_back(cur->val); // 中
}
最后
以上就是二叉树的三种遍历方式有学到,欢迎关注+点赞一下!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)