二叉树实例学习
Posted phoenixdsg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树实例学习相关的知识,希望对你有一定的参考价值。
第一次学习:
节点类代码头文件:
#ifndef BINNODE_H #define BINNODE_H #include <iostream> //***************************************** //代码5.2 , BinNode状态与性质的判断 #define isRoot(x) (!((x).parent)) #define isLChild(x) (!isRoot(x)&&(&(x)==(x).parent->lc)) //不是根节点,同时必须是父节点的左孩子 //******************************************* #define BinNodePosi(T) BinNode<T>* //节点位置 typedef enum{RB_RED,RB_BLACK} RBColor;//节点颜色 template <typename T> class BinNode { public: T data;//数值 int height; int npl;//Null Path Length(左式堆,也可直接用height代替) RBColor color; BinNodePosi(T) parent;//父节点 BinNodePosi(T) lc;//左子节点 BinNodePosi(T) rc;//右子节点 //构造函数 BinNode():parent(NULL),lc(NULL),rc(NULL),height(0),npl(1),color(RB_RED){} BinNode(T e,BinNodePosi(T) p=NULL,BinNodePosi(T) lc=NULL,BinNodePosi(T) rc=NULL, int h=0,int l=1,RBColor c=RB_RED) { data=e; parent=p; lc=lc,rc=rc; height=h; npl=l; color=c; } }; #endif // BINNODE_H
节点类测试程序:
#include <iostream> #include <binnode.h> #include <string> using namespace std; void judgeRoot(BinNode<string> &node) { if(isRoot(node)) cout<<node.data<<" is root!"<<endl; else cout<<node.data<<" is not a root!"<<endl; } void judgeLChild(BinNode<string> &node) { if(isLChild(node)) cout<<node.data<<" is left child!"<<endl; else cout<<node.data<<" is not left child!"<<endl; } int main() { BinNode<string> n1("node1"); BinNode<string> n0("node0"); BinNode<string> n2("node2"); n1.lc=&n2; n2.parent=&n1; // judgeNode(n0);//测试根节点函数”isRoot()“ judgeLChild(n2);//测试左孩子函数“isLChild(node)”
return 0; }
以上是关于二叉树实例学习的主要内容,如果未能解决你的问题,请参考以下文章