树和二叉树
1、已知二叉树的链式存储结构,求二叉树的深度
分析:若二叉树为空,深度为0,否则等于左右子树中的最大深度加1;
int BinTreeDepth(BinTree bt)
{
int depl, depr;
if (bt == NULL)
{
return 0;
}
else
{
depl = BinTreeDepth(bt->lchild);
depr = BinTreeDepth(bt->lchild);
if (depl > depr)
{
return depl + 1;
}
else
{
return depr + 1;
}
}
}
2、以二叉链表为存储结构,试编写在二叉树中查找值为x的结点及求x所在结点在数中层数的算法;
int fount = 0;
BintNode *p;
void FindBT(BinTree bt, DataType x)
{
if ((bt != NULL) && (!found))
{
if (bt->data == x)
{
p = bt;
found = 1;
}
else
{
FindBT(bt->lchild, x); //遍历查找左子树
FindBT(bt->rchild, x); //遍历查找右子树
}
}
}
3、以二叉链表作为存储结构,试利用指针数组实现编写非递归的前序遍历二叉树的算法
void Preorder(BinTree bt)
{
BinNode *ST[n];
int top = 1;
do
{
while (bt != NULL)
{
/* code */
top = top + 1;
ST[top] = bt;
bt = bt->lchild;
}
if (top != -1)
{
bt = ST[top];
top = top - 1;
bt = bt->rchild;
}
} while (top != -1 || bt != NULL)
}
前序遍历
void PrOrder(BtNode* p)
{
if (p != nullptr)
{
cout << p->val <<" ";
PrOrder(p->Leftchild);
PrOrder(p->Rightchild);
}
}
中序遍历
void InOrder(BtNode* p)
{
if (p != nullptr)
{
InOrder(p->Leftchild);
cout << p->val << " ";
InOrder(p->Rightchild);
}
}
后续遍历
void PaOrder(BtNode* p)
{
if (p != nullptr)
{
PaOrder(p->Leftchild);
PaOrder(p->Rightchild);
cout << p->val << " ";
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)