C++ 二叉树初探

作者: 杰米 | 来源:发表于2016-03-14 17:33 被阅读413次

准备面试实习生,也是时候把数据结构与算法拿出来复习了,今天先来个最基础的二叉树创建与遍历。
用的是C++。

先贴出一个二叉树的节点基类

//
// Created by 杰米 on 16/3/14.
//
#ifndef BINODETREE_BINNODE_H
#define BINODETREE_BINNODE_Htemplate 
<typename E> class BinNode {
public:
    virtual  ~BinNode(){}
    virtual  void setElement(const E&)=0;
    virtual  BinNode*left() const = 0;
    virtual  void setLeft(BinNode*) = 0;
    virtual  BinNode*right() const = 0;
    virtual  void setRight(BinNode*) = 0;
    virtual bool isLeaf() = 0;};
#endif //BINODETREE_BINNODE_H

BSTNode是BinNode的抽象类的简单实现

//
// Created by 杰米 on 16/3/14.
//
#ifndef BINODETREE_BSTNODE_H
#define BINODETREE_BSTNODE_H
#include<iostream>
#include "BinNode.h"
template <typename  Key,typename E>class BSTNode:
 public BinNode<E> {
private:
    Key k;
    E it;
    BSTNode *lc;
    BSTNode *rc;
public:
    BSTNode() {lc = rc = NULL;}
    BSTNode(Key K,E e,BSTNode* l =NULL,BSTNode* r =NULL)    {        k=K;it = e;;lc = l; rc = r;    }
    ~BSTNode(){}
     E & element(){return it;}
     void setElement(const E& e){it = e;}

     Key& key(){ return k;}    void setKey(const Key & K){k=K;}

    inline BSTNode *left() const{ return lc;} 

    void  setLeft(BinNode<E>*b){ lc=(BSTNode*)b;}

    inline BSTNode *right() const{ return rc;}

    void setRight(BinNode<E>*b){ rc = (BSTNode*)b;}

    bool  isLeaf() {return (rc == NULL) && (lc == NULL);}

        };
#endif
 //BINODETREE_BSTNODE_H

下面是main代码,创建二叉树并遍历

#include <iostream>
using namespace std;
#include "BSTNode.h"
//前序遍历
void pre1(BSTNode<int,int >*root){
    if(root==NULL)
    {        return;    }
    else
    {
        cout<<root->key()<<endl;
        pre1(root->left());
        pre1(root->right());
    }}
//中序遍历
void pre2(BSTNode<int,int >*root){
    if(root==NULL)
    {        return;    }
    else
    {        pre2(root->left());
        cout<<root->key()<<endl;
        pre2(root->right());
    }}
//后序遍历
void pre3(BSTNode<int,int >*root)
{    
if(root==NULL)
    {        return;    }
    else
    {
        pre3(root->left());
        pre3(root->right());
        cout<<root->key()<<endl;
    }}
int main() {
    BSTNode<int,int>*root=new BSTNode<int,int>(0,0);
    BSTNode<int,int>*currentNode=root;
//创建一棵二叉树
    for(int i=1;i<5;i++)
    {
        BSTNode<int,int>*left=new BSTNode<int,int>(i,i*10);
        currentNode->setLeft(left);
        BSTNode<int,int>*right=new BSTNode<int,int>(100-i,i*10);
        currentNode->setRight(right);
        currentNode=left;
    }
//遍历
cout<<"前序遍历"<<endl;
pre1(root);
cout<<"中序遍历"<<endl;
pre2(root);
cout<<"后序遍历"<<endl;
pre3(root);
    return 0;
}
创建的二叉树 运行结果

相关文章

网友评论

    本文标题:C++ 二叉树初探

    本文链接:https://www.haomeiwen.com/subject/fvmflttx.html