• 二叉树的叶子节点数和树的高度


    问题:这两种操作都用到了递归,别人说递归好理解,我真的不觉得递归好理解,只是递归的代码看起来简单。

    下面代码是求高度的另一种方法。递归计算高度是从底向上计算的,因此叶子节点高度为0;

    方法真的很巧妙。。。

    比如getTreeHigh(a->lchild)返回的就是a的左子树的高度,getTreeHigh(a->lchild)返回的就是a的右子树的高度。

    int getTreeHigh(BinTree btree)
    {
    	int depth;
            if(btree==NULL)
    	    depth=0;
    	else
    	{
    		depthleft=getTreeHigh(btree->lchild);
    		depthright=getTreeHigh(btree->rchild);
    		depth=1+max(depthleft,depthright);
    	}
    	return depth;
    }
    

      

    代码:

    #include <iostream>
    #include <cstdlib>
    #include <stack>
    using namespace std;
    static int num=0;
    typedef struct btree
    {
    	char data;
    	struct btree *lchild;
    	struct btree *rchild;
    }*BinTree;
    
    void CreateBinTree(BinTree &btree)
    {
    	char c;
    	cin>>c;
    	if(c=='#')
    		btree=NULL;
    	else
    	{
    		btree=(BinTree)malloc(sizeof(struct btree));
    		btree->data=c;
    		CreateBinTree(btree->lchild);
    		CreateBinTree(btree->rchild);
    	}
    }
    void showBTree(BinTree btree)
    {
    	if(btree)
    	{
    		cout<<btree->data<<" ";
    		showBTree(btree->lchild);
    		showBTree(btree->rchild);
    	}
    }
    
    int getTreeHigh(BinTree btree)
    {
           if(btree==NULL)
    	    return 0;
    	if(btree->lchild&&btree->rchild)
    		return max(getTreeHigh(btree->lchild)+1,getTreeHigh(btree->rchild)+1);
    	if(btree->lchild)
    		return getTreeHigh(btree->lchild)+1;
    	if(btree->rchild)
    		return getTreeHigh(btree->rchild)+1;
    	return 1;
    
    }
    
    int getNumOfleaves(BinTree btree)
    {
    
    	if(btree)
    	{
    	if(btree->lchild==NULL&&btree->rchild==NULL)
    		num++;
    	else 
    	{
    		getNumOfleaves(btree->lchild);
    		getNumOfleaves(btree->rchild);
    	}
    	}
    	return num;
    }
    int main()
    {
    	BinTree bt;
    	int count;
    	int h=0;
    	cout<<"create bintree:"<<endl;
    	CreateBinTree(bt);
    	cout<<"output the bintree:"<<endl;
    	showBTree(bt);
    	cout<<endl;
    	count=getNumOfleaves(bt);
    	cout<<"叶子节点数为: "<<count<<endl;
    	h=getTreeHigh(bt);
    	cout<<"二叉树的高度为: "<<h<<endl;
    	return 0;
    }
    

    运行结果:

  • 相关阅读:
    T-SQL逻辑查询的各阶段
    linqtosql(GroupBy/Having/Count/Sum/Min/Max/Avg操作符)
    jquery获取select下拉框的值以及change时间绑定
    英汉翻译功能的简单实现
    jQuery zTree默认加载一级几点
    Linq第一篇
    vs2015+win10搭开发环境
    asp.net mvc 中使用静态页
    .net中的异步操作
    (转载)TFS2013安装+配置
  • 原文地址:https://www.cnblogs.com/xshang/p/3052017.html
Copyright © 2020-2023  润新知