首页 > 代码库 > 二叉树的线性存储
二叉树的线性存储
/*************************************************** 二叉树的线性存储 by Rowandjj 2014/5/23 ***************************************************/ #include<iostream> #include<MATH.H> using namespace std; #define MAX 255 #define NIL -1 typedef struct _POSITION_ { int level;//层数 int order;//序号 }Position,*pPosition; //若节点位置为i,其父节点位置为(i+1)/2-1 //若父节点位置为i,则子节点位置为i*2+1,i*2+2 //若节点的层数为i,序号为j,则在数组中的位置为pow(2,i-1)+j-2 void InitTree(int *T); void CreateTree(int *T); int GetDepth(int *T); bool GetRoot(int *T,int *e); bool IsEmpty(int *T); bool GetValue(int *T,Position pos,int *e); bool Assign(int *T,Position pos,int iValue); void MidTravel(int *T,int i); void PreTravel(int *T,int i); void PosTravel(int *T,int i); void LevelTravel(int *T); int GetParent(int *T,int e); int GetLeftChild(int *T,int e); int GetRightChild(int *T,int e); int GetLeftSibling(int *T,int e); int GetRightSibling(int *T,int e); void InsertNode(int *T,); void InitTree(int *T) { int i; for(i = 0; i < MAX; i++) { *(T + i) = NIL; } } void CreateTree(int *T) { int i = 0; int a; while(true) { cin>>a; if(a == NIL) { break; } if(i!=0 && T[(i+1)/2-1]==NIL && a!=NIL) { return; } T[i] = a; i++; } } int GetDepth(int *T) { int i = MAX - 1; while(T[i] == NIL) { i--; } i++; int j = 0; while(i >= pow(2,j)) { j++; } return j; } bool IsEmpty(int *T) { return T[0]!=NIL ? false : true; } bool GetRoot(int *T,int *e) { if(IsEmpty(T)) { return false; }else { *e = T[0]; return true; } } bool GetValue(int *T,Position pos,int *e) { int index = pow(2,pos.level-1)+pos.order-2; if(T[index] == NIL) { return false; } else { *e = T[index]; return true; } } bool Assign(int *T,Position pos,int iValue) { int index = pow(2,pos.level-1)+pos.order-2; if(iValue!=NIL && T[(index+1)/2-1]==-1)//当前节点的父节点为空 { return false; } if(iValue=http://www.mamicode.com/=NIL && T[index*2+1]!=-1||T[index*2+2]!=-1)//子节点不为空但是当前节点为空>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。