数据结构--二叉树(C++)

本文介绍了二叉树作为数据结构的优势,解决了数组和链表在查找和操作上的时间复杂度问题。接着详细阐述了二叉树节点(BinNode)的结构,包括数据域、左右孩子指针和双亲指针。同时,文章讨论了二叉树的四种遍历方式:先序、中序、后序及层序遍历,其中后两者利用递归和队列实现。
摘要由CSDN通过智能技术生成

零、二叉树解决的问题

通过学习数组和链表,前者可以在常数时间内找到目标对象,但是插入和删除操作,都需要耗费线性的时间。后者则可以在常数时间内进行插入和删除,但是查找某一元素,则需要线性时间。很显然各有利弊,所以我们能不能选用一种更好的结构呢?树结构则是很好的选择。

在这里我们以二叉树为例,虽为特例,但是我们都可以将任何有序的多叉树转换为二叉树。

一、BinNode类的声明与实现

二叉树的结点包含数据域、左孩子指针、右孩子指针、双亲指针。

#define BinNodePosi(T) BinNode<T>*
template<typename T> struct BinNode {
    T data;
    BinNodePosi(T) lChild;
    BinNodePosi(T) rChild;
    BinNodePosi(T) parent;
    //构造函数
    BinNode():parent(NULL),lChild(NULL),rChild(NULL){}
    BinNode(T e,BinNodePosi(T) p=NULL,BinNodePosi(T) lc=NULL,BinNodePosi(T) rc=NULL):data(e),parent(p),lChild(lc),rChild(rc){}
    //开放接口
    BinNodePosi(T) insertAsLC(T const & e);
    BinNodePosi(T) insertAsRC(T const & e);
    bool IsRoot(BinNodePosi(T) p) {
  return !(p->parent);}
    bool IsLChild(BinNodePosi(T) p) {
  return !IsRoot(p)&&(p==p->parent->lChild);}
    bool IsRChild(BinNodePosi(T) p) { return !IsRoot(p)&&(p
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值