非递归算法求二叉树叶子节点数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非递归算法求二叉树叶子节点数相关的知识,希望对你有一定的参考价值。

参考技术A int count(struct Node *root)

int n=0;
stack s;
if(root == null) return 0;
s.push(root);
while(!s.empty())
p = s.pop();
if(p->left == null && p->right==null)
n++;

if(p->left != null)
s.push(p->left);

if(p->right != null)
s.push(p->right);


return n;

二叉树的相关算法

1.求二叉树所有的节点数

2.求二叉树所有的叶子节点数

3.求二叉树最小值的节点值

4.求二叉树所有节点值之和

5.求二叉树节点值为x的个数

6.删除二叉树

//求二叉树所有的节点数
int nodes(BTNode *r){
    if(r==0)
        return 0;
    else
        return nodes(r->lchild)+nodes(r->rchild)+1;
} 

//求二叉树所有的叶子节点数
int leafNodes(BTNode *r){
    if(r==NULL)
        return 0;
    else if(r->lchild==NULL&&r->rchild==NULL)
        return 1;
    else
        return leafNodes(r->lchild)+leafNodes(r->rchild);
} 

//求二叉树最小值的节点值
void minNode(BTNode *r,elemType &min){
    if(r!=NULL){
        if(r->data<min)
            min=r->data;
        minNode(r->lchild,min);
        minNode(r->rchild,min);
    }
    
} 

//求所有节点值之和
int findSum(BTNode *r){
    if(r==NULL)
        return 0;
    else
        return r->data+findSum(r->lchild)+findSum(r->rchild);
} 

//求二叉树中节点值为x的节点个数
int findCount(BTNode *r,int x){
    if(r==NULL)
        return 0;
    if(x==r->data)
        return 1+findCount(r->lchild,x)+findCount(r->rchild,x);
    else
        return findCount(r->lchild,x)+findCount(r->rchild,x);    
    
} 

//删除二叉树
void delTree(BTNode *r){
    if(r!=NULL){
        delTree(r->lchild);
        delTree(r->rchild);
        free(r);
    }
} 

 

以上是关于非递归算法求二叉树叶子节点数的主要内容,如果未能解决你的问题,请参考以下文章

java数据结构二叉树查找结点操作,递归调用求详细讲解

二叉树算法之1-计算二叉树第k层节点个数

Java二叉树的递归,非递归遍历,高度,节点数,叶子节点数

CART算法节点分裂演示

求代码:实现二叉树中所有结点左右子树的交换

二叉树的相关算法