关于二叉树有感

之前不知道为甚,每次一打开VS,苦思冥想如何建立二叉树好,翻开Clifford A. Shaffer的《数据结构与算法》发现里面根本就没有讲如何建立,望着右上角,红色的小叉叉居然向我招手,我毫不犹豫地对她进行响应……就这样我这个星期一直没有进步。直到今天,硬着头皮,终于coded两种结构的二叉树。写完后发现很容易,一点儿都不难,当然我只是建立和遍历。下面是分别对两种结构编写过程中一些的感受。

 

1、基于指针的二叉查找树

 

template<typename Elem>

class BiNode

{

public:

BiNode(const Elem&, BiNode* pL = NULL, BiNode* pR = NULL);

bool IsLeaf(){ return m_pLeft==NULL && m_pRight==NULL; }

public:

Elem m_Data;

BiNode* m_pLeft;

BiNode* m_pRight;

 

};

其实这样声明会导致挺大结构性开销的,因为叶子节点的左右孩子依然占据空间,不过既然是第一次写,也就不管了。

 

 

 

这是建立,因为太久没有碰C++的模板,然后想试一下,所以就用模板写了,不过写的过程中发现自己原来有挺多东西已经忘记了,所以呀熟能生巧,生疏了就忘记。建立的时候我把元素值大的放在右边,小的放在左边,相等的就抛弃。写这个的时候没有什么难的,我觉得写基于数组的二叉树比较难。

 

 

 

2、基于数组的二叉查找树

在编写过程中基本上和基于指针的二叉查找树没什么区别。不过如果按照算法分析就挺大区别了,主要在于消除结构性浪费,而且方便查找,插入删去。不过建立时我觉得比基于指针的要难,因为要判断左右孩子是否为空,在数组中,以我现在的能力只能给她设置一个特殊值来判断,除此外就没有其他方法了,所以我初始化数组时用-1为空的标志。如果初始化数组可以这么做memset( Array, n, size*sizeof(Array)), 不过有一点要注意,我当时用Arrary = new int[size]来申请空间,然后memset( Array ,n , sizeof(Array))却发现只有Array[0]是我设定的值,其余元素都是统一的乱值,所以我在想是否由于sizeof(Array)中,Array是指针所以得出来的值只是一个元素的大小呢?而非整个数组的大小……

当初判断左右孩子是否为空时我还想了其他两种方法,不过都被舍弃了,第一种是用一个值记录乱值,然后一次作为判断左右孩子是否为空的标志,不过因为是随机值所以不好,out.第二种方法是用一些转义字符,不过由于我用整型,这会自动转成整数,所以……

 

 

总的来说,今天收获颇大的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值