首页 > 编程知识 正文

c语言求一棵二叉树的结点,c语言求二叉树结点个数

时间:2023-05-03 07:03:12 阅读:225692 作者:2583

话不多说,直接看代码

1.头文件及二叉树结点定义

#include<iostream>using namespace std;typedef struct Bitnode {char data;struct Bitnode* lchild, * rchild;}Bitnode,*Bitree;

2.建立二叉链表,这里用的是先序建立

void FCreatBitree(Bitree& T)//先序建立二叉链表{char ch;cin >> ch;if (ch == '#')T = NULL;else{T = new Bitnode;T->data = ch;FCreatBitree(T->lchild);FCreatBitree(T->rchild);}}

3.叶子结点数的计算,采用递归方法

int Leaves_count(Bitree T)//求叶子节点数{int num=;if (T==NULL) {return 0;}if (T->lchild == NULL && T->rchild == NULL)num++;Leaves_count(T->lchild);Leaves_count(T->rchild);return num;}

4.打印叶子结点路径

void Leaves_path(Bitree T) {Bitree p, q;//定义2个结点用于保存int top = 0;//top为当前p所指结点位置Bitree s[50];//使用q保存刚遍历过的节点,初始为空q = NULL;p = T;//传入的结点赋值给pwhile (p != NULL || top != 0) //如果p不为空或者top不为零进入循环{if (p != NULL) //如果p不为空,直接遍历到一个左叶子结点{s[++top] = p;p = p->lchild;}//遍历完后,p即为一个左叶子结点,在下一个循环中进入else ifelse if (top > 0){p = s[top];//把上面遍历的最后结点赋给pif (p->rchild == NULL || p->rchild == q){//如果p为叶子节点,则打印路径if (p->lchild == NULL && p->rchild == NULL) {for (int i = 1; i <= top; i++)cout <<s[i]->data <<" ";cout << endl;}//使用q保存刚访问过的节点q = p;top--;//跳过刚才的左遍历,继续退栈p = NULL;}//否则遍历右子树else p = p->rchild;}}}

5.主程序调用上方函数即可

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。