由于E也没有左右孩子,根据操作2),输出E,并将其出栈,将Pre指向E,Cur指向栈顶结点B,此时输出序列为:DE;
由于B的左右孩子已经被输出,即满足条件Pre==Cur->lchild或Pre==Cur->rchild序列二叉排序树,根据操作2),输出B,并将其出栈,将Pre指向B,Cur指向栈顶结点C,此时输出序列为:DEB;
由于C有左孩子,根据操作3),将其入栈,Cur指向栈顶节点F;
分析入栈、出栈的过程,可以找到判断一个序列是不是栈的弹出序列的规律:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。举例说明,例如i,m,n是三个相邻的结点,假设经过若干步操作,已经把结点i之前的指针调整完毕,这些结点的next指针都指向前面一...。现有6个元素按a.b.c.d.e、f的顺序进栈,下列______序列是可能的出栈序列。
由于C的左孩子已经被输出,即满足Pre==Cur->lchild,根据操作2),输出C,并将其出栈,将Pre指向C序列二叉排序树,Cur指向栈顶结点A,此时输出序列为:DEBFC;
由于A的左右孩子已经被输出,根据操作2),输出A,并将其出栈,此时输出序列为:DEBFCA;
此时栈空,遍历结束

一 二叉树的一些概念
二叉树就是每个结点最多有两个子树的树形存储结构。先上图,方便后面分析。

1 满二叉树和完全二叉树
9.完全二叉树的顺序存储方案,是指将完全二叉树的结点从上至下、从左至右一次存放到一个顺序结构的数组中。堆排序是一种树形选择排序,在排序过程中,将a[n]看成是完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。ps: 树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短.。
2 树的深度
点数即倍数为2的(番数减1)次方、5番对应16倍,如11224444557799万,玩家手牌中。点数即倍数为2的(番数减1)次方,叫地胡,而叫牌正好是这4张中的任意一张。答案:选d, 2的0次方减3等于-2,2的1次方减3等于-1,2的2次方减3等于1,2的3次方减3等5,则2的4次方减3等于13。
3 树的孩子,兄弟,双亲
上图中,B,C是A的孩子,B,C之间互为兄弟,
typedef struct _BiTNode
{
int data;
_BiTNode *leftChild;
_BiTNode *rightChild;
}BiTNode, *pBiTree;
//创建二叉树, 先序顺序
int CreateBiTree(pBiTree *root)
{
char ch = 0;
fflush(stdin);
if ((ch = getchar()) == 'a')//控制树的结构
{
*root = NULL;
}
else
{
*root = (BiTNode *)malloc(sizeof(BiTNode));
if (!(*root))
{
return RET_ERROR;
}
(*root)->data = GetRandom();
CreateBiTree(&(*root)->leftChild);
CreateBiTree(&(*root)->rightChild);
}
return RET_OK;
}
int g_i = 0;
//创建二叉树,自动执行,方便测试
int CreateBiTreeAuto(pBiTree *root)
{
char szOrder[] = "bbaabaa";
char ch = 0;
if (szOrder[g_i++] == 'a')//控制树的结构
{
*root = NULL;
}
else
{
*root = (BiTNode *)malloc(sizeof(BiTNode));
if (!(*root))
{
return RET_ERROR;
}
(*root)->data = GetRandom();
CreateBiTreeAuto(&(*root)->leftChild);
CreateBiTreeAuto(&(*root)->rightChild);
}
return RET_OK;
}
//先序遍历
int PreOrderVisitTree(pBiTree T, VisitType pFuncVisit)
{
if (T)
{
(*pFuncVisit)(T->data);
if (PreOrderVisitTree(T->leftChild, pFuncVisit) == RET_OK)
{
if (PreOrderVisitTree(T->rightChild, pFuncVisit) == RET_OK)
{
return RET_OK;
}
}
return RET_ERROR;
}
else
{
return RET_OK;
}
}
中序遍历和后序遍历
理論上的遍歷順序是:根、左子樹、右子樹。理論上的遍歷順序是:左子樹、右子樹、根。所有结点只有左子树叫左斜树,只有右结点叫右斜树。
20,二叉树非递归遍历:前序遍历最简单,当前结点没有左儿子时,栈顶就是下一个结点。t是要遍历树的根指针,中序遍历要求在遍历完左子树后,访问根,再遍历右子树。 供选择的答案: a:①是特殊的树②不是树的特殊形式③是两棵树的总称④是只有二个根结点的树形结构 b:①左子结点②右子结点③左子结点或者没有右子结点 ④兄弟 c~d: ①最左子结点②最右子结点③最邻近的右兄弟④最邻近的左兄弟⑤最左的兄弟⑥最右的兄弟e:①o(n)②o(n)③o(log2n)④o(log2n) 15、每一棵树都能唯一地转换为它所对应的二叉树,树的这种二叉树表示对树的运算带来很大的好处。
<p>1.结点拥有的子树数称为结点的度(degree),度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。除根结点外,分支结点也称为内部结点,树的度是树内各结点的度的最大值。</p><p>2.树中结点的最大层次称为树的深度或高度。</p><p>3.二叉树是n个结点的有限集合,该集合或者为空集,或者由一个根结点和两颗互不相交的,分别称为根结点的左子树和右子树的二叉树组成。</p><p>4.斜树:所有的结点都只有左子树的二叉树叫左斜树所有的结点都是只有右子树的二叉树叫右斜树。</p><p>5.满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样的二叉树称为满二叉树。
性质:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-111390-2.html
而且得是F35B