• C++ 二叉树的建立与遍历


    重温了一下二叉树这个结构,以前上课的时候都是感觉懂了,具体实现还没有动手写过。主要写了二叉树的建立,递归遍历以及深度,根节点等方法。

    //树节点的头文件

    #ifndef BinTreeNode_H_
    #define BinTreeNode_H_
    #define NULL 0
    class BinTreeNode
    {
    public:
    char data;
    BinTreeNode* leftChild; //左子树
    BinTreeNode* rightChild;//右子树

    public:
    BinTreeNode();
    BinTreeNode(char item);//带参构造函数

    };

    #endif

    #include "BinTreeNode.h"

    BinTreeNode::BinTreeNode()
    {

    }

    BinTreeNode::BinTreeNode(char item)
    {

    data=item;
    leftChild=NULL;
    rightChild=NULL;

    }

    #ifndef BinTree_H_
    #define BinTree_H_


    #include "BinTreeNode.h"
    class BinTree
    {
    public:
    BinTree();
    BinTreeNode *getRoot();
    int getdepth(BinTreeNode* );
    void createTree(BinTreeNode* &);//构造二叉树,传递的是指针的引用
    void preorderTraversal(BinTreeNode* &);//先序递归遍历
    void inorderTraversal(BinTreeNode* &);//中序递归遍历
    void postorderTraversal(BinTreeNode* &);//后续递归遍历
    private:
    BinTreeNode *root;
    int depth;
    };


    #endif

    #include "BinTree.h"
    #include <iostream>
    using namespace std;
    BinTree::BinTree()
    {
    root =NULL;
    }
    BinTreeNode* BinTree::getRoot()
    {
    return root;
    }

    void BinTree::createTree(BinTreeNode* &treeNode)
    {

    char item;
    cin>>item;
    if(item=='0')
    {
    treeNode=NULL;
    }
    else
    {
    treeNode=new BinTreeNode(item);
    if(root==NULL)
    {
    root=treeNode;
    }
    createTree(treeNode->leftChild);
    createTree(treeNode->rightChild);
    }
    }


    void BinTree::preorderTraversal(BinTreeNode * &currentNode)
    {
    cout<<currentNode->data<<" ";
    if(currentNode->leftChild!=NULL)
    preorderTraversal(currentNode->leftChild);
    if(currentNode->rightChild!=NULL)
    preorderTraversal(currentNode->rightChild);

    // if(currentNode)
    // {
    // cout<<currentNode->data<<" ";
    // preorderTraversal(currentNode->leftChild);
    // preorderTraversal(currentNode->rightChild);
    // }

    }

    void BinTree::inorderTraversal(BinTreeNode * &currentNode)
    {

    if(currentNode!=NULL)
    {
    inorderTraversal(currentNode->leftChild);
    cout<< currentNode->data<<" ";
    inorderTraversal(currentNode->rightChild);
    }
    }
    void BinTree::postorderTraversal(BinTreeNode* &currentNode)
    {
    if(currentNode!=NULL)
    {
    postorderTraversal(currentNode->leftChild);
    postorderTraversal(currentNode->rightChild);
    cout<<currentNode->data<<" ";

    }
    }

    int BinTree::getdepth(BinTreeNode* parentNode)//获取二叉树的深度
    {
    if(parentNode==NULL)
    return 0;
    int ldepth=getdepth(parentNode->leftChild);
    int rdepth=getdepth(parentNode->rightChild);
    if(ldepth>=rdepth) return (ldepth+1);
    return (rdepth+1);


    }

    #include "BinTree.h"
    #include <iostream>
    using namespace std;
    int main()
    {
    BinTree binTree;
    BinTreeNode * node=new BinTreeNode;
    cout<<"请输入二叉树节点(例如:ab00c00)";
    binTree.createTree(node);
    binTree.preorderTraversal(node);
    cout<<endl;
    binTree.inorderTraversal(node);
    cout<<endl;
    binTree.postorderTraversal(node);
    cout<<endl;
    BinTreeNode *root=binTree.getRoot();
    cout<<root->data;
    cout<<binTree.getdepth(node);

    return 0;
    }

  • 相关阅读:
    轮子来袭 vJine.Core Orm 之 03_架构分析
    轮子来袭 vJine.Core 之 AppConfig<T>
    C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
    炫酷 2048 完全免费 色彩无线 流畅如飞
    DebugLog 打印方法执行时间
    [转] charles使用教程指南
    Macbook Pro配置PHP开发环境
    基于ubuntu 14搭建nginx+php+mysql环境
    Android Studio -修改LogCat的颜色
    [转]
  • 原文地址:https://www.cnblogs.com/gardener/p/5973431.html
Copyright © 2020-2023  润新知