标签:赋值 ora top 保存 tree ++ 指针的引用 建二叉树 eof
创建二叉树 CreateBTree(*&b,*str)
最近发现 默 写 代 码 是 检 查 自 己 有 没 有 理 解 代 码 的 一 个 好 方 法,现在就把自己刚刚默写的一段代码发一下。
算法设计:
1.先构造根结点N,再构造左子树L,最后构造右子树R;
2.构造右子树R时,因为担心找不到N,所以先保存N;
3.结点是按最近原则匹配,所以使用栈保存N。
1 void CreateBTree(BTNode *&b, char *str) //注意b是指针的引用,双向传递 2 { 3 BTNode *p, *St[MaxSize]; //St数组作为顺序栈,注意是指针数组 4 int k, j = 0, top = -1; //定义栈顶top 5 char ch; 6 b = NULL; //b赋值为空,初始时二叉链为空 7 ch = str[j]; 8 while (ch != ‘\0‘) //循环扫描str中的每一个字符 9 { 10 switch (ch) 11 { 12 case‘(‘:top++; St[top] = p; k = 1; break;
/*
遇到‘(’,说明前面创建的p有孩子结点,需要将其进栈作为栈顶结点,以便建立其与孩子结点的关系。
*/
13 case ‘,‘:k = 2; break; //开始处理右孩子结点 14 case ‘)‘:top--; break; //栈顶结点的子树处理完毕,退栈。 15 default: 16 p = (BTNode *)malloc(sizeof(BTNode)); //不是“( ) ,”,这些标志而是数据的话,创建一个结点,由p指向它。 17 p->data = ch; //存放结点值 18 p->lchild = p->rchild = NULL; //左右结点设置为空 19 if (b == NULL) //根结点为空,说明还没有根结点 20 { 21 b = p; //那就把p指向的结点作为根结点 22 } 23 else //已经有了根结点 24 { 25 switch (k) 26 { 27 case 1:St[top] = p->lchild; break; //新建结点作为栈顶结点的左孩子 28 case 2:St[top] = p->rchild; break; //新建结点作为栈顶结点的右孩子 29 } 30 } 31 } 32 j++; 33 ch=str[j]; //继续扫描str 34 } 35 }
就是酱紫~~
标签:赋值 ora top 保存 tree ++ 指针的引用 建二叉树 eof
原文地址:http://www.cnblogs.com/DU-fighting/p/7890946.html