数据结构----二叉树例题

数据结构----二叉树例题,第1张

树和二叉树

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 << " ";
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1354287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)

保存