如何求二叉树的高度(递归实现)

来源:互联网 发布:淘宝客返利是什么意思 编辑:程序博客网 时间:2024/05/01 10:16

核心代码

比较左右子树的高度,把高的那个子树+1返回,就是整棵树的高度


int Height(BiTreeNode *head){if(head==NULL) return 0;else{int m=Height(head->LeftChild);int n=Height(head->RightChild);return (m>n)? (m+1):(n+1);}}


完整代码:

#include<iostream>#include<assert.h>using namespace std; typedef struct Lnode{char data;struct Lnode *LeftChild;struct Lnode *RightChild;}BiTreeNode;void Initiate(BiTreeNode **head){(*head)=(BiTreeNode *)malloc(sizeof(BiTreeNode));assert((*head)!=NULL); //if the judging conditio is true,this statement is not executed(*head)->LeftChild=NULL;(*head)->RightChild=NULL;}BiTreeNode * InsertLeftChild(BiTreeNode *head,char a ){if(head==NULL) return NULL;BiTreeNode * p,*t;t=head->LeftChild;p=(BiTreeNode *)malloc(sizeof(BiTreeNode));assert(p!=NULL);p->data=a;p->RightChild=NULL;p->LeftChild=t;head->LeftChild=p;return head->LeftChild;}BiTreeNode *InsertRightChild(BiTreeNode *head,char a){if(head==NULL)  return NULL;BiTreeNode *p,*t;t=head->RightChild;p=(BiTreeNode *)malloc(sizeof(BiTreeNode));assert(p!=NULL);p->data=a;p->LeftChild=NULL;p->RightChild=t;head->RightChild=p;return head->RightChild;}void Destroy(BiTreeNode *head){if(head!=NULL && head->LeftChild!=NULL)Destroy(head->LeftChild);if(head!=NULL && head->RightChild!=NULL)Destroy(head->RightChild);free(head);}void LDR(BiTreeNode *head){if(head!=NULL){LDR(head->LeftChild);cout<<head->data<<"  ";LDR(head->RightChild);}}int Height(BiTreeNode *head){if(head==NULL) return 0;else{int m=Height(head->LeftChild);int n=Height(head->RightChild);return (m>n)? (m+1):(n+1);}}void main(){BiTreeNode *head,*p,*q;Initiate(&head);head->data='g';p=InsertLeftChild(head,'a');p=InsertLeftChild(p,'b');p=InsertRightChild(head,'c');LDR(head);cout<<endl;cout<<"the height:"<<Height(head)<<endl;Destroy(head);system("pause");}

0 0
原创粉丝点击