diff --git a/_04.树/_a.二叉树顺序结构.c b/_04.树/_a.二叉树顺序结构.c index 17be40b..5f9e241 100644 --- a/_04.树/_a.二叉树顺序结构.c +++ b/_04.树/_a.二叉树顺序结构.c @@ -2,7 +2,7 @@ * @Author: Xu Bai * @Date: 2019-07-09 22:50:41 * @LastEditors: Xu Bai - * @LastEditTime: 2019-07-11 22:44:11 + * @LastEditTime: 2019-07-12 22:42:15 */ #include "stdlib.h" #include "stdio.h" @@ -125,8 +125,9 @@ Status Root(SqBiTree T, ElemType *e) } /*شeλã㣬 Ľֵ*/ -Status Value(SqBiTree T,Position e){ - return T[(int)powl(2,e.level-1)+e.order-2]; +Status Value(SqBiTree T, Position e) +{ + return T[(int)powl(2, e.level - 1) + e.order - 2]; } /*λeĽ㸳ֵvalue */ @@ -148,3 +149,152 @@ Status Assign(SqBiTree T, Position p, ElemType e) return OK; } +/*eTķǸ㣬򷵻˫ף򷵻ءա */ +ElemType Parent(SqBiTree T, ElemType e) +{ + int i; + if (T[0] == Nil) + { + return Nil; + } + for (i = 1; i <= MAX_TREE_SIZE - 1; i++) + { + if (T[i] == e) + { + return T[(i + 1) / 2 - 1]; + } + } + return Nil; +} + +ElemType LeftChild(SqBiTree T, ElemType e) +{ + int i; + if (T[0] == Nil) + { + return Nil; + } + for (i = 0; i <= MAX_TREE_SIZE - 1; i++) + { + if (T[i] == e) + { + return T[i * 2 + 1]; + } + } + return Nil; +} + +ElemType RightChild(SqBiTree T, TElemType e) +{ + int i; + if (T[0] == Nil) /* */ + return Nil; + for (i = 0; i <= MAX_TREE_SIZE - 1; i++) + if (T[i] == e) /* ҵe */ + return T[i * 2 + 2]; + return Nil; /* ûҵe */ +} + +/*eֵ */ +ElemType LeftSibling(SqBiTree T, ElemType e) +{ + int i; + if (T[0] == Nil) + { + return Nil; + } + for (i = 1; i < MAX_TREE_SIZE; i++) + { + if (T[i] == e && i % 2 == 0) + { + /* ҵeΪżҺӣ */ + return T[i - 1]; + } + } + return Nil; +} + +/*eֵ */ +ElemType LeftSibling(SqBiTree T, ElemType e) +{ + int i; + if (T[0] == Nil) + { + return Nil; + } + for (i = 1; i < MAX_TREE_SIZE; i++) + { + if (T[i] == e && i % 2 == 1) + { + /* ҵeΪżҺӣ */ + return T[i + 1]; + } + } + return Nil; +} + +void PreTraverse(SqBiTree T, int e) +{ + visit(T[e]); + if (T[2 * e + 1] != Nil) + { + /* */ + PreTraverse(T, 2 * e + 1); + } + if (T[2 * e + 2] != Nil) + { + /* */ + PreTraverse(T, 2 * e + 2); + } +} + +Status PreOrderTraverse(SqBiTree T) +{ + if (!BiTreeEmpty(T)) + { + PreTraverse(T, 0); + } + printf("\n"); + return OK; +} + +void InTraverse(SqBiTree T, int e) +{ + if (T[2 * e + 1] != Nil) + { + InTraverse(T, 2 * e + 1); + } + visit(T[e]); + if (T[2 * e + 2] != Nil) + { + InTraverse(T, 2 * e + 2); + } +} + +Status InOrderTraverse(SqBiTree T) +{ + if (!BiTreeEmpty(T)) /* */ + InTraverse(T, 0); + printf("\n"); + return OK; +} + +void PostTraverse(SqBiTree T, int e) +{ + if (T[2 * e + 1] != Nil) /* */ + PostTraverse(T, 2 * e + 1); + if (T[2 * e + 2] != Nil) /* */ + PostTraverse(T, 2 * e + 2); + visit(T[e]); +} + +/* ʼ: T */ +/* : T */ +Status PostOrderTraverse(SqBiTree T) +{ + if (!BiTreeEmpty(T)) /* */ + PostTraverse(T, 0); + printf("\n"); + return OK; +} +