当前位置: 首页 > 编程笔记 >

C语言中计算二叉树的宽度的两种方式

洪华皓
2023-03-14
本文向大家介绍C语言中计算二叉树的宽度的两种方式,包括了C语言中计算二叉树的宽度的两种方式的使用技巧和注意事项,需要的朋友参考一下

C语言中计算二叉树的宽度的两种方式

二叉树作为一种很特殊的数据结构,功能上有很大的作用!今天就来看看怎么计算一个二叉树的最大的宽度吧。

采用递归方式

下面是代码内容:

int GetMaxWidth(BinaryTree pointer){
  int width[10];//加入这棵树的最大高度不超过10
  int maxWidth=0;
  int floor=1;
  if(pointer){
    if(floor==1){//如果访问的是根节点的话,第一层节点++;
      width[floor]++;
      floor++;
      if(pointer->leftChild)
        width[floor]++;
      if(pointer->rightChild)
        width[floor]++;
    }else{
      floor++;
      if(pointer->leftChild)
        width[floor]++;
      if(pointer->rightChild)
        width[floor]++;
    }
    if(maxWidth<width[floor])
      maxWidth=width[floor];
    GetMaxWidth(pointer->leftChild);
    floor--;//记得退回一层,否则会出错。因为已经Get过了,所以要及时的返回。
    GetMaxWidth(pointer->rightChild);
  }
  return maxWidth;
}

采用非递归方式

采用非递归方式计算二叉树的宽度需要借助于队列。代码如下:

int GetMaxWidth(BinaryTree pointer){
  if(pointer==null){
    return 0;
  }
  Queue<BinaryTreeNode> queue=new ArrayDeque<BinaryTreeNode>();
  int maxWidth=1;//最大宽度
  queue.add(pointer);
  while(true){
    int size=queue.size();//计算当前层的节点的个数
    if(size==0){
      break;
    }
    while(size>0){//如果当前层还有节点就进行下去
      BinaryTreeNode node=queue.poll();
      size--;
      if(node->leftChild)
        queue.add(node->leftChild);//当前节点的左子树入队
      if(node->rightChild)
        queue.add(node->rightChild);//当前节点的右子树入队
      maxWidth=Math.max(size,queue.size());
    }
  }
  return maxWidth;//返回计算所得的最大的二叉树的宽度。
}

总结:

不管采用哪种方式,实际上还是利用了对二叉树的遍历的特点来进行的。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 计算二叉树最大的宽度 根据带虚结点的先序序列建立二叉树,计算该二叉树最大的宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)并输出。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据在一行中输入一个字符串(不含空格且长度不超过80),表示二叉树的先序遍历序列,其中字符*表示虚结点(对应的子树为空)。 输出格式: 对于每组测试,输出二叉树的最大宽度。输出格式为:“maxWidth: m

  • 我需要关于计算二叉树高度的理论的帮助,通常是符号。 我看过以下文章: 计算二叉树的高度 其中一个帖子给出了以下符号: 高度(节点)=最大值(高度(节点L)、高度(节点R))1 假设我有以下二叉树: 因此,我是否计算左节点(8)和右节点(42)的最大值,然后加上1?我不太明白这种符号是如何计算树的高度的。

  • 本文向大家介绍Python实现二叉树的最小深度的两种方法,包括了Python实现二叉树的最小深度的两种方法的使用技巧和注意事项,需要的朋友参考一下 找到给定二叉树的最小深度 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 注意:叶子节点没有子树 Example: Given binary tree [3,9,20,null,null,15,7],     3    / \   9  20

  • 试图计算二叉树中从根到叶的路径和。似乎不起作用,doesIt的值变为true,但由于它是递归的,所以当堆栈弹出时,它会切换回false。我不知道怎么修。如何更改代码,使doesIt的值更改为true后,它会一直向上传播? 考虑树:[5,4,8,11, null, null, null,7,2]无序 5有两个孩子4和8,4有一个孩子11,8没有孩子 hasPathSum(根,22)

  • 本文向大家介绍C语言判定一棵二叉树是否为二叉搜索树的方法分析,包括了C语言判定一棵二叉树是否为二叉搜索树的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言判定一棵二叉树是否为二叉搜索树的方法。分享给大家供大家参考,具体如下: 问题 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 解法1:暴力搜索 首先说明一下二叉树和二叉搜索树的区别。二

  • 我应该使用表达式树来计算后缀表达式。假设我有一棵这样的树 我首先需要计算b子树并将其结果存储在节点中,然后是c*d,依此类推,直到我将结果存储在根节点中。 我尝试了使用堆栈的递归方法,但那不起作用。伪代码是这样的 函数评估(节点) 评估(节点- 然而,这并没有奏效。我还必须在每一步上显示树,以便显示正在减少的节点。我谷歌了很多次,但我找不到所需的答案。任何人请帮助我如何做到这一点。 }