计算二叉树的深度和叶子结点数(递归算法实现)

【问题描述】计算二叉树的深度和叶子结点数【输入形式】输入二叉树的先序遍历序列建立二叉树。【输出形式】输出二叉树的叶子结点数和深度。【样例输入】ABC####【样例输出】Leaves:1Depth:3...
摘要由CSDN通过智能技术生成

【问题描述】

计算二叉树的深度和叶子结点数

【输入形式】

输入二叉树的先序遍历序列建立二叉树。

【输出形式】

输出二叉树的叶子结点数和深度。

【样例输入】

A

B

C

#

#

#

#

【样例输出】

Leaves:1

Depth:3

求给定二叉树的深度:

    二叉树的深度就是二叉树中结点的最大层次。如果二叉树是空树,则深度为0;否则,分别求二叉树根左子树和右子树的深度,取其中最大值加一就是该 二叉树的最大深度。

    递归计算公式为:Depth(T)={0;当T==NULL;                                                               }

                                                      {max(Depth(T->lchild),Depth(T->rchild))+1;当T!=NULL;}

如下:

int  depth(BiTree  t)
{
//此处补充代码,求取二叉树的深度
    int hl,hr;
    if(t==NULL)return 0;     //若数为空则返回0
    else
    {
        hl=depth(t->lchild);  //递归求左子树的深度
        hr=depth(t->rchild);  //递归求右子树的深度
        if(hl>hr)return (hl+1);
        
  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是您需要的程序代码: ```python # 定义二叉树的结构体 class TreeNode: def __init__(self, val=None, left=None, right=None): self.val = val self.left = left self.right = right # 先序遍历二叉树递归算法 def preorderTraversal(root): if not root: return print(root.val) preorderTraversal(root.left) preorderTraversal(root.right) # 中序遍历二叉树递归算法 def inorderTraversal(root): if not root: return inorderTraversal(root.left) print(root.val) inorderTraversal(root.right) # 后序遍历二叉树递归算法 def postorderTraversal(root): if not root: return postorderTraversal(root.left) postorderTraversal(root.right) print(root.val) # 计算二叉树深度递归算法 def maxDepth(root): if not root: return 0 left_depth = maxDepth(root.left) right_depth = maxDepth(root.right) return max(left_depth, right_depth) + 1 # 统计二叉树的结点个数递归算法 def countNodes(root): if not root: return 0 return countNodes(root.left) + countNodes(root.right) + 1 # 统计二叉树叶子结点个数递归算法 def countLeaves(root): if not root: return 0 if not root.left and not root.right: return 1 return countLeaves(root.left) + countLeaves(root.right) # 设计该二叉树第K层的结点个数 def countNodesKthLevel(root, k): if not root: return 0 if k == 1: return 1 left_count = countNodesKthLevel(root.left, k - 1) right_count = countNodesKthLevel(root.right, k - 1) return left_count + right_count # 二叉树中所有结点值最大的元素 def maxNodeValue(root): if not root: return float('-inf') left_max = maxNodeValue(root.left) right_max = maxNodeValue(root.right) return max(left_max, right_max, root.val) # 打印二叉树叶子结点递归算法 def printLeaves(root): if not root: return if not root.left and not root.right: print(root.val) printLeaves(root.left) printLeaves(root.right) # 测试 if __name__ == '__main__': # 构建一个二叉树 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) root.right.left = TreeNode(6) root.right.right = TreeNode(7) # 测试先序遍历 print("先序遍历结果:") preorderTraversal(root) # 测试中序遍历 print("中序遍历结果:") inorderTraversal(root) # 测试后序遍历 print("后序遍历结果:") postorderTraversal(root) # 测试计算二叉树深度 print("二叉树深度为:", maxDepth(root)) # 测试统计二叉树结点个数 print("二叉树结点个数为:", countNodes(root)) # 测试统计二叉树叶子结点个数 print("二叉树叶子结点个数为:", countLeaves(root)) # 测试设计该二叉树第K层的结点个数 k = 2 print("二叉树第", k, "层的结点个数为:", countNodesKthLevel(root, k)) # 测试二叉树中所有结点值最大的元素 print("该二叉树中所有结点值最大的元素为:", maxNodeValue(root)) # 测试打印二叉树叶子结点 print("二叉树叶子结点为:") printLeaves(root) ``` 运行结果如下: ``` 先序遍历结果: 1 2 4 5 3 6 7 中序遍历结果: 4 2 5 1 6 3 7 后序遍历结果: 4 5 2 6 7 3 1 二叉树深度为: 3 二叉树结点个数为: 7 二叉树叶子结点个数为: 4 二叉树第 2 层的结点个数为: 2 该二叉树中所有结点值最大的元素为: 7 二叉树叶子结点为: 4 5 6 7 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值