n个结点的二叉链表有n+1个空链域 两种角度解释链域使用

两种角度解释链域使用

从父结点角度

每个结点(除了根结点)都有一个父结点的链域指向它。这意味着在包含 n n n 个结点的二叉树中,有 n − 1 n-1 n1 个链域被用于指向其他结点,因为根结点没有父结点指向它。

从子结点角度

每个非叶子结点都有两个链域,分别指向它的左子结点和右子结点。所以,如果一个结点是非叶子结点,它的两个链域都会被使用。

举例说明

考虑一个具体的二叉树:

      A    
    /   \    
   B     C  
  / \   / \  
 D   E F   G

总结点数 n = 7 n = 7 n=7,总链域数 2 n = 14 2n = 14 2n=14

从父结点角度看

  • 除了根结点 A 之外,其他结点都有一个父结点的链域指向它:
    • B 和 C 被 A 的链域指向
    • D 和 E 被 B 的链域指向
    • F 和 G 被 C 的链域指向

所以,使用的链域数是 n − 1 = 7 − 1 = 6 n-1 = 7-1 = 6 n1=71=6

从子结点角度看

  • 每个非叶子结点都有两个链域指向它的子结点:

    • A 有两个链域,分别指向 B 和 C
    • B 有两个链域,分别指向 D 和 E
    • C 有两个链域,分别指向 F 和 G

    所以,非叶子结点使用的链域数是 6(与父结点角度一致)。

归纳总结

这两种角度描述的链域是同一回事。它们分别从父结点和子结点的角度描述了链域的使用情况:

  • 父结点角度:除了根结点外,每个结点都有一个父结点的链域指向它,因此 n − 1 n-1 n1 个链域被使用。
  • 子结点角度:每个非叶子结点的两个链域指向它的子结点,这样也可以算出被使用的链域数。

空链域的来源总链域数是 2 n 2n 2n,实际使用的链域数是 n − 1 n-1 n1,所以空链域数是:

2 n − ( n − 1 ) = n + 1 2n - (n-1) = n + 1 2n(n1)=n+1

tips:个人简单粗暴的理解

因为 n − 1 n−1 n1 条边连接着 n n n个结点

【题目1】

设有n(n≥1)个结点的二叉树采用三叉链表表示,其中每个结点包含三个指针,分别指向其左孩子、右孩子及双亲(若不存在,则置为空),则树中空指针的数量为__。

【答案】

n+2

【解析】

分析三叉链表中的指针

每个结点有三个指针:

  • 左孩子指针(left child pointer)
  • 右孩子指针(right child pointer)
  • 双亲指针(parent pointer)

总指针数

对于 n n n 个结点的二叉树,总指针数是 3 n 3n 3n,因为每个结点有三个指针。

空指针的计算

双亲指针
  • 除了根结点外,每个结点都有一个双亲指针指向它的父结点。
  • 因此,双亲指针中有 n − 1 n-1 n1 个是非空的(因为根结点没有父结点指向它)。
  • 所以,有 n − ( n − 1 ) = 1 n - (n-1) = 1 n(n1)=1 个双亲指针是空的(即根结点的双亲指针)。
左孩子和右孩子指针
  • 每个结点最多有一个左孩子和一个右孩子,因此总共有 2 n 2n 2n 个孩子指针。
  • 每个非叶子结点的孩子指针指向其子结点,叶子结点的孩子指针为空。实际使用的孩子指针数为 n − 1 n−1 n1(因为 n − 1 n−1 n1 条边连接着 n n n个结点)。
  • 因此,有 2 n − ( n − 1 ) = n + 1 2n - (n-1) = n+1 2n(n1)=n+1 个孩子指针是空的。

空指针数

  • 总指针数: 3 n 3n 3n(每个结点有三个指针)
  • 非空指针数:双亲指针的 n − 1 n-1 n1 个 + 孩子指针的 n − 1 n-1 n1 个(指向子结点的) = 2 n − 2 2n-2 2n2
  • 空指针数:总指针数 3 n 3n 3n 减去非空指针数 2 n − 2 2n-2 2n2 = 3 n − ( 2 n − 2 ) = n + 2 3n - (2n-2) = n+2 3n(2n2)=n+2 所以,树中空指针的数量为 n + 2 n+2 n+2

【题目2】

具有n个结点的三叉树用三叉链表表示,则树中空指针域的个数为( )。
A.3n+1 B. 2n+1 C. 3n-1 D. 3n

【答案】

B

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值