非二叉树的建立及其基本操作*
树不只有二叉树还可以为一个结点连接2个以上的结点,在现实事件中比比皆是,这时有非二叉树的记录和操作具有必要性。而实现思路是将非二叉树转化为二叉树存储,而读取使用时,恢复到原来的结构,即时有一种可恢复的模式转换,使得对使用者虚拟,同时代码又可以复用二叉树的基本操作方法。
1. 图示演示 非二叉树 转换为 二叉树
树的括号法建立二叉树结构
“一棵不开花的树”
“兄弟相连”:将统一父母的结点相连(蓝色)
“离家出走”:如果不是大儿子(最左边的子结点),则断开与父亲的链接。应该出门自力更生。
“长兄为父”:旋转兄弟使得兄长(最左边的子节点),成为其他儿子的父节点,且用右指针
**最后呈现出 ,左指针指向真正的子结点,而右指针指向兄弟(暂作称呼)。**遍历也是基于这条规则。
2.代码(基于家族族实例):
#include <iostream>
#include <string>
#include <stack>
using namespace std;
typedef struct node
{
string name;
int floor;
struct node * rchild = NULL;
struct node * lchild = NULL;
}people;//结点
stack<char>charStack;//字符栈
stack<people*>peoplePtrStack;//结点栈
people * CreatMarvelTree();//创建树
void PreVisitTree(people *t);//先序遍历
void DestroyTree(people *t);//清除内存
void InInformation(people *p);