二叉树的三种遍历

举报
秋名山码民 发表于 2022/05/26 23:05:56 2022/05/26
【摘要】 @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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。