最近有读者问我关于二叉树叶子节点个数的问题。这个问题一般也是比较偏基础的面试题目,很简单啦。
直接代码,我们一起来再来学习一下:
- #include<iostream>
- #define N 63
-
- using namespace std;
-
- char str[] = "ab#d##c#e##";
- int i = -1;
-
- typedef struct node
- {
- struct node *leftChild;
- struct node *rightChild;
- char data;
- }BiTreeNode, *BiTree;
-
- //生成一个结点
- BiTreeNode *createNode(int i)
- {
- BiTreeNode * q = new BiTreeNode;
- q->leftChild = NULL;
- q->rightChild = NULL;
- q->data = i;
-
- return q;
- }
-
- BiTree createBiTree1()
- {
- BiTreeNode *p[N] = {NULL};
- int i;
- for(i = 0; i < N; i++)
- p[i] = createNode(i + 1);
-
- // 把结点连接成树
- for(i = 0; i < N/2; i++)
- {
- p[i]->leftChild = p[i * 2 + 1];
- p[i]->rightChild = p[i * 2 + 2];
- }
-
- return p[0];
- }
-
- void createBiTree2(BiTree &T)
- {
- i++;
- char c;
- if(str[i] && '#' == (c = str[i]))
- T = NULL;
- else
- {
- T = new BiTreeNode;
- T->data = c;
- createBiTree2(T->leftChild);
- createBiTree2(T->rightChild);
- }
- }
-
- int getLeafNode(BiTree T)
- {
- if(NULL == T)
- return 0;
-
- if(NULL == T->leftChild && NULL == T->rightChild)
- return 1;
-
- return getLeafNode(T->leftChild) + getLeafNode(T->rightChild);
- }
-
- int main()
- {
- BiTree T1;
- T1 = createBiTree1();
- cout << getLeafNode(T1) << endl;
-
- BiTree T2;
- createBiTree2(T2);
- cout << getLeafNode(T2) << endl;
-
- return 0;
- }