二叉树几个基本操作

二叉树结构

struct TreeNode{
    int val;
    TreeNode* left= nullptr;
    TreeNode* right= nullptr;
    explicit TreeNode(int v):val(v){}
};

层序生成二叉树

给定一个数num,生成层序为从0到num的二叉树

TreeNode* TreeInit(int num){
    auto new_root = new TreeNode(0);
    queue<TreeNode*> q;   //辅助队列
    int i=1;
    auto p=new_root;
    bool flag = false;
    while (i<=num){
        if (!flag){
            p->left = new TreeNode(i);
            q.push(p->left);
            flag = true;
            i++;
            continue;
        }
        else {
            p->right = new TreeNode(i);
            q.push(p->right);
            p=q.front();
            q.pop();
            flag = false;
            i++;
            continue;
        }
    }
    return new_root;
}

前中后序遍历二叉树

void PreTraverse(TreeNode* root){
    if (root== nullptr){
        return;
    }
    cout<<root->val<<' ';
    PreTraverse(root->left);
    PreTraverse(root->right);
}

void MidTraverse(TreeNode* root){
    if (root== nullptr){
        return;
    }
    MidTraverse(root->left);
    cout<<root->val<<' ';
    MidTraverse(root->right);
}

void LasTraverse(TreeNode* root){
    if (root== nullptr){
        return;
    }
    LasTraverse(root->left);
    LasTraverse(root->right);
    cout<<root->val<<' ';
}

层次遍历

void LevelTraverse(TreeNode* root){
    queue<TreeNode*> q;
    q.push(root);
    while (!q.empty()){
        if (q.front()->left!= nullptr){
            q.push(q.front()->left);
        }
        if (q.front()->right!= nullptr){
            q.push(q.front()->right);
        }
        cout<<q.front()->val<<' ';
        q.pop();
    }
}

全部评论

相关推荐

盖茨伯爵:一样兄弟,我从4月开始发到现在了,都三四百个了
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务