求二叉樹某一層的所有節點及求二叉樹的高度

1、輸出二叉樹某一層上所有的節點,一般用遞歸方式解決。

2、求二叉樹的高度,也用遞歸方式解決。

 

/*

如何打印二叉樹某一層上的所有節點?
如何求出二叉樹的高度?

*/

#include <stdio.h>
#include <string.h>

struct Node{
	int value;
	Node *left;
	Node *right;
};

//構造二叉樹
void createLR(Node *pn){
	if((pn->value)<50){
		Node *pl=new Node;
		Node *pr=new Node;
		pl->value=(pn->value)*2;
		pr->value=(pn->value)*2+1;
		pn->left=pl;
		pn->right=pr;
		createLR(pl);
		createLR(pr);
	}else{
		pn->left=NULL;
		pn->right=NULL;
	}
}

//打印二叉樹某一層上的所有節點?
void level_sum_out(Node *p, int level){

	if(!p){
		return;
	}

	if(1==level){
		printf("%d ",p->value);
	}else{
		level_sum_out(p->left,level-1);
		level_sum_out(p->right,level-1);
	}
}

//如何求出二叉樹的高度?
int getHeight(Node *p){
	if(NULL==p){
		return 0;
	}else{
		int lh=getHeight(p->left);
		int rh=getHeight(p->right);
		return (lh>rh)?(lh+1):(rh+1);
	}
}

void main(){

//	char a[]="abc";
//	int t=strlen(a);
//	t=sizeof(a); 

	//構造二叉樹
	Node *pn=new Node;
	pn->value=1;
	createLR(pn);
    level_sum_out(pn,5);
	int height=getHeight(pn);
	printf("\n%d\n",height);


}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章