首页后端开发ASP.NETc++经典例题之先序二叉树的构建

c++经典例题之先序二叉树的构建

时间2024-01-31 04:41:02发布访客分类ASP.NET浏览984
导读:收集整理的这篇文章主要介绍了c++经典例题之先序二叉树的构建,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章小编将带大家一起回顾经典C++之构建先序二叉树,有兴趣的小伙伴一起来复习一下吧!二叉树首先要解决构建问题,才能考虑后续的遍...
收集整理的这篇文章主要介绍了c++经典例题之先序二叉树的构建,觉得挺不错的,现在分享给大家,也给大家做个参考。本篇文章小编将带大家一起回顾经典C++之构建先序二叉树,有兴趣的小伙伴一起来复习一下吧!

二叉树首先要解决构建问题,才能考虑后续的遍历,这里贴出通过先序构建二叉树,同时包含四种二叉树的遍历方法(先序,中序,后序,逐层)

第一、定义BinaryTreeNode 类

#include iostream>
    #include string>
    #include queue>
    using namespace std;
    templatetyPEname T >
    class BinaryTree;
    template typename T>
 class BinaryTreeNode {
    public:    friend class BinaryTreeT>
    ;
    BinaryTreeNode() {
            data = NULL;
            lChild = rChild = NULL;
    }
    BinaryTreeNode(T newdata) {
            this->
    data = newdata;
            lChild = rChild = NULL;
    }
    T getData() {
            return data;
    }
        BinaryTreeNodeT>
 * getLeftNode() {
            return lChild;
    }
        BinaryTreeNodeT>
 * getRightNode() {
            return rChild;
    }
        T data;
        BinaryTreeNodeT>
    * lChild;
        BinaryTreeNodeT>
    * rChild;
PRivate:}
    ;
    

View Code

第二、定义BinaryTree 类

template typename T>
 class BinaryTree {
    public:    BinaryTreeNodeT>
     *root;
        char* p;
    BinaryTree() {
     root = NULL;
 }
    BinaryTree(T data) {
            root = new BinaryTreeNodeT>
    (data);
            root->
    lChild = NULL;
            root->
    rChild = NULL;
    }
    ~BinaryTree() {
            delete root;
    }
        //构建二叉树并返回    BinaryTreeNodeT>
* CreateTree() {
            BinaryTreeNodeint>
    * BT = NULL;
            char t;
            cin >
    >
     t;
        if (t == '#')        {
                return NULL;
        }
        else {
                int num = t - '0';
                bt = new BinaryTreeNodeT>
    (num);
                bt->
    lChild = CreateTree();
                bt->
    rChild = CreateTree();
        }
            return bt;
    }
        //先序构建二叉树    BinaryTreeNodeT>
* PreCreateTree() {
            BinaryTreeNodeint>
    * bt = NULL;
            if (this->
root == NULL)        {
                cout  "请输入根节点(#代表空树):";
        }
        else {
                cout  "请输入节点(#代表空树):";
        }
            char t;
            cin >
    >
     t;
        if (t == '#')        {
                return NULL;
        }
        else {
                int num = t - '0';
                bt = new BinaryTreeNodeT>
    (num);
                if (this->
root == NULL)            {
                    this->
    root = bt;
            }
                cout  bt->
    data  "的左孩子";
                bt->
    lChild = PreCreateTree();
                cout  bt->
    data  "的右边孩子";
                bt->
    rChild = PreCreateTree();
        }
            return bt;
    }
           void preOderTraversal(BinaryTreeNodeT>
     *bt);
      //先序遍历    void inOrderTraversal(BinaryTreeNodeT>
     *bt);
      //中序遍历    void postOrderTraversal(BinaryTreeNodeT>
     *bt);
    //后序遍历    void levelTraversal(BinaryTreeNodeT>
     *bt);
    //逐层遍历private:}
    ;
    template typename T>
    void BinaryTreeT>
    ::preOderTraversal(BinaryTreeNodeT>
 *bt) {
    if (bt)    {
            cout  bt->
    data;
            BinaryTreeT>
    ::preOderTraversal(bt->
    getLeftNode());
            BinaryTreeT>
    ::preOderTraversal(bt->
    getRightNode());
    }
}
    template typename T>
    void BinaryTreeT>
    ::inOrderTraversal(BinaryTreeNodeT>
 *bt) {
    if (bt)    {
            BinaryTreeT>
    ::inOrderTraversal(bt->
    getLeftNode());
            cout  bt->
    data;
            BinaryTreeT>
    ::inOrderTraversal(bt->
    getRightNode());
    }
}
    template typename T>
    void BinaryTreeT>
    ::postOrderTraversal(BinaryTreeNodeT>
 *bt) {
    if (bt)    {
            BinaryTreeT>
    ::postOrderTraversal(bt->
    getLeftNode());
            BinaryTreeT>
    ::postOrderTraversal(bt->
    getRightNode());
            cout  bt->
    data;
    }
}
    template typename T>
    void BinaryTreeT>
    ::levelTraversal(BinaryTreeNodeT>
 *bt) {
        queueBinaryTreeNodeT>
    *>
     que;
        que.push(bt);
    while (!que.empty())    {
            BinaryTreeNodeT>
    * proot = que.front();
            que.pop();
            cout  proot->
    data;
            if (proot->
lChild != NULL)        {
                que.push(proot->
    lChild);
//左孩子入队        }
            if (proot->
rChild != NULL)        {
                que.push(proot->
    rChild);
//右孩子入队        }
    }
}
    

View Code

第三、主程序运行

#include "pch.h"#include iostream>
#include "BinaryTree.h"int main(){
        //场景测试2    BinaryTreeint>
     btree;
        btree.PreCreateTree();
    //先序构建二叉树    cout  "先序遍历:";
        btree.preOderTraversal(btree.root);
     cout  endl;
    //先序遍历        cout  "中序遍历:";
        btree.inOrderTraversal(btree.root);
     cout  endl;
    //中序遍历    cout  "后序遍历:";
        btree.postOrderTraversal(btree.root);
     cout  endl;
    //后序遍历    cout  "逐层序遍历:";
        btree.levelTraversal(btree.root);
}
    

View Code

最终测试运行截图

相关教程:C++视频教程

以上就是c++经典例题之先序二叉树的构建的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

C++

若转载请注明出处: c++经典例题之先序二叉树的构建
本文地址: https://pptw.com/jishu/593493.html
windows下怎么安装node版本管理工具(nvm),怎么避坑? javascript splice方法怎么用

游客 回复需填写必要信息