#include<stdio.h>
#include<stdlib.h>
#include<stack>
using namespace std;
typedef struct BiTNode{
//数据
int data;
//左右孩子指针
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//按先序序列创建二叉树
int CreateBiTree(BiTree &T){
char data;
//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树
scanf("%c",&data);
if(data == ' '){
T = NULL;
}
else{
T = (BiTree)malloc(sizeof(BiTNode));
//生成根结点
if(!T)
exit(-1);
T->data = data;
//构造左子树
CreateBiTree(T->lchild);
//构造右子树
CreateBiTree(T->rchild);
}
return 0;
}
int func(BiTree root)
{
int max ;
int min ;
max = min = root->data;
stack<BiTree> s;
BiTree p=root;
while(p!=NULL||!s.empty())
{
while(p!=NULL)
{
s.push(p);
p=p->lchild;
}
if(!s.empty())
{
p=s.top();
//cout<<p->data<<" ";
if(p->data>max)
max = p->data;
if(p->data<min)
min = p->data;
s.pop();
p=p->rchild;
}
}
return max-min;
}
int main()//主函数
{
printf("输入二叉树:\n");
BiTree Ta;
CreateBiTree(Ta);
printf("最大值是:\n");
printf("%d",func(Ta));
return 0;
}
#include<stdlib.h>
#include<stack>
using namespace std;
typedef struct BiTNode{
//数据
int data;
//左右孩子指针
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//按先序序列创建二叉树
int CreateBiTree(BiTree &T){
char data;
//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树
scanf("%c",&data);
if(data == ' '){
T = NULL;
}
else{
T = (BiTree)malloc(sizeof(BiTNode));
//生成根结点
if(!T)
exit(-1);
T->data = data;
//构造左子树
CreateBiTree(T->lchild);
//构造右子树
CreateBiTree(T->rchild);
}
return 0;
}
int func(BiTree root)
{
int max ;
int min ;
max = min = root->data;
stack<BiTree> s;
BiTree p=root;
while(p!=NULL||!s.empty())
{
while(p!=NULL)
{
s.push(p);
p=p->lchild;
}
if(!s.empty())
{
p=s.top();
//cout<<p->data<<" ";
if(p->data>max)
max = p->data;
if(p->data<min)
min = p->data;
s.pop();
p=p->rchild;
}
}
return max-min;
}
int main()//主函数
{
printf("输入二叉树:\n");
BiTree Ta;
CreateBiTree(Ta);
printf("最大值是:\n");
printf("%d",func(Ta));
return 0;
}