关键词搜索

源码搜索 ×
×

二叉树中,叶子结点个数怎么求?

发布2021-10-18浏览3468次

详情内容

最近有读者问我关于二叉树叶子节点个数的问题。这个问题一般也是比较偏基础的面试题目,很简单啦。

直接代码,我们一起来再来学习一下:

  1. #include<iostream>
  2. #define N 63
  3. using namespace std;
  4. char str[] = "ab#d##c#e##";
  5. int i = -1;
  6. typedef struct node
  7. {
  8. struct node *leftChild;
  9. struct node *rightChild;
  10. char data;
  11. }BiTreeNode, *BiTree;
  12. //生成一个结点
  13. BiTreeNode *createNode(int i)
  14. {
  15. BiTreeNode * q = new BiTreeNode;
  16. q->leftChild = NULL;
  17. q->rightChild = NULL;
  18. q->data = i;
  19. return q;
  20. }
  21. BiTree createBiTree1()
  22. {
  23. BiTreeNode *p[N] = {NULL};
  24. int i;
  25. for(i = 0; i < N; i++)
  26. p[i] = createNode(i + 1);
  27. // 把结点连接成树
  28. for(i = 0; i < N/2; i++)
  29. {
  30. p[i]->leftChild = p[i * 2 + 1];
  31. p[i]->rightChild = p[i * 2 + 2];
  32. }
  33. return p[0];
  34. }
  35. void createBiTree2(BiTree &T)
  36. {
  37. i++;
  38. char c;
  39. if(str[i] && '#' == (c = str[i]))
  40. T = NULL;
  41. else
  42. {
  43. T = new BiTreeNode;
  44. T->data = c;
  45. createBiTree2(T->leftChild);
  46. createBiTree2(T->rightChild);
  47. }
  48. }
  49. int getLeafNode(BiTree T)
  50. {
  51. if(NULL == T)
  52. return 0;
  53. if(NULL == T->leftChild && NULL == T->rightChild)
  54. return 1;
  55. return getLeafNode(T->leftChild) + getLeafNode(T->rightChild);
  56. }
  57. int main()
  58. {
  59. BiTree T1;
  60. T1 = createBiTree1();
  61. cout << getLeafNode(T1) << endl;
  62. BiTree T2;
  63. createBiTree2(T2);
  64. cout << getLeafNode(T2) << endl;
  65. return 0;
  66. }

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载