二叉树的C++实现(涉及三种遍历)

本来想定义文章为转载的,但是我忘记了参考哪些博主的(很久之前练习的),但是大部分都是参考的小甲鱼视频的,在此对参考的博主说声抱歉。

再次说明,以下的代码主要是根据小甲鱼数据结构视频(b站上有)中所讲的去写的,和视频的代码没有多大区别(但都是自己理解之后去写的,还补充了一些,但也参考了一些博主,具体的我也给忘记了,所以若和谁代码重复请告诉我,我及时删除),主要是为了我自己练手的。网上版本较多,我觉得我写的这个比较好理解?(别打脸)

开始之前,先回忆一下二叉树的三种遍历方式。

前序遍历:根结点 —> 左子树 —> 右子树(先遍历根节点,然后左右)
这棵树的前序遍历为:ABDEGHCF
中序遍历:左子树—> 根结点 —> 右子树(在中间遍历根节点)
这棵树的中序遍历为:DBGEHACF
后序遍历:左子树 —> 右子树 —> 根结点(最后遍历根节点)
这棵树的后序遍历为:DGHEBFCA
具体参考这位博主吧`
https://blog.csdn.net/qq_42651904/article/details/90288715


//  Created by xiaobinbin on 2020/3/17.
//  Copyright © 2020 xiaobinbin. All rights reserved.


//强调的是,引用很关键,品,你细品~
#include <iostream>

using namespace std;

template<class T>
class TreeNode{
   
public:
    T key;
    TreeNode* lchild;
    TreeNode* rchild;
    TreeNode(){
   
        lchild=NULL;
        rchild=NULL;
    }//日常好习惯,随手构造函数一下。在涉及到有指针的成员时,最好重写拷贝构造函数,=重载,防止多重析构
};

//中序遍历
template <class T>
void TreeinOrder(TreeNode<T>* bt){
   
    if(bt){
   
        TreeinOrder(bt->lchild);
        cout<<bt->key<<" ";
        TreeinOrder(bt->rchild);
    }
}

//查找,返回TreeNode*
template<class T>
TreeNode<T>* Search(TreeNode<T>* bt,T k,TreeNode<T>* &p)//注意这里的引用呦,这里的p主要就是记录最后查找的位置
{
   
    TreeNode<T>* q=NULL;
    q=bt;
    while(q){
   
        p=q;
        if(q->key==k)
            return p;
        else if(q->key>k)
            q=q->lchild;
        else
            q=q->rchild;
    }
    return NULL;
}

//插入
template<class T>
void TreeInsert(TreeNode<T>* &bt,T k){
   
    TreeNode<T>* p=NULL,*q;
    q=bt;
    if(Search(q, k, p)==NULL){
   //查找失败才插入,p主要是为了记录最后一次查找的位置
        TreeNode<T> *r= new TreeNode<T>;
        r->key=k;
        r->rchild=r->lchild=NULL;
        if(q==NULL){
     //根结点为空
            bt=r;
            return;
        }
        if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值