dy#include<iostream>
using namespace std;
struct Node{ //结点
int data;
Node *lchild;
Node *rchild;
};
Node *createNode(int data) //建结点
{
Node *node=new Node;
node->data=data;
node->lchild=0;
node->rchild=0;
return node;
}
Node *buildTree() //建树
{
Node *root=0;
return root;
}
void insertTree(Node *&root,int data) //插成有序树
{
Node *node=createNode(data);
if(!root)root=node;
else if(node->data<root->data)insertTree(root->lchild,node->data);
else insertTree(root->rchild,node->data);
return ;
}
void printTree(Node *root) //升序打印
{
if(!root)return ;
printTree(root->lchild);
cout<<root->data<<" ";
printTree(root->rchild);
}
int finder(Node *root,int data)
{
if(!root)return 0;
if(root->data==data)return 1;
else return (finder(root->lchild,data)||finder(root->rchild,data));
}
void findfather(Node *root,int i,int j)
{
if(!root)return;
if(finder(root,i)&&finder(root,j))
{
if(finder(root->lchild,i)&&finder(root->lchild,j))findfather(root->lchild,i,j);
else if(finder(root->rchild,i)&&finder(root->rchild,j))findfather(root->rchild,i,j);
else cout<<"它们的是近父结点为:"<<root->data<<endl;
}
else cout<<"有结点不在树中"<<endl;
}
int main(int argc,char *argv[])
{
int data,i,j;
Node *root=buildTree();
cout<<"请输入你的数据以-1结束"<<endl;
cin>>data;
while(data!=-1)
{
insertTree(root,data);
cin>>data;
}
printTree(root);
cout<<endl;
cout<<"请输入你要寻找的两个数据"<<endl;
cin>>i>>j;
findfather(root,i,j);
system("PAUSE");
return 0;
}
可能有点问题
using namespace std;
struct Node{ //结点
int data;
Node *lchild;
Node *rchild;
};
Node *createNode(int data) //建结点
{
Node *node=new Node;
node->data=data;
node->lchild=0;
node->rchild=0;
return node;
}
Node *buildTree() //建树
{
Node *root=0;
return root;
}
void insertTree(Node *&root,int data) //插成有序树
{
Node *node=createNode(data);
if(!root)root=node;
else if(node->data<root->data)insertTree(root->lchild,node->data);
else insertTree(root->rchild,node->data);
return ;
}
void printTree(Node *root) //升序打印
{
if(!root)return ;
printTree(root->lchild);
cout<<root->data<<" ";
printTree(root->rchild);
}
int finder(Node *root,int data)
{
if(!root)return 0;
if(root->data==data)return 1;
else return (finder(root->lchild,data)||finder(root->rchild,data));
}
void findfather(Node *root,int i,int j)
{
if(!root)return;
if(finder(root,i)&&finder(root,j))
{
if(finder(root->lchild,i)&&finder(root->lchild,j))findfather(root->lchild,i,j);
else if(finder(root->rchild,i)&&finder(root->rchild,j))findfather(root->rchild,i,j);
else cout<<"它们的是近父结点为:"<<root->data<<endl;
}
else cout<<"有结点不在树中"<<endl;
}
int main(int argc,char *argv[])
{
int data,i,j;
Node *root=buildTree();
cout<<"请输入你的数据以-1结束"<<endl;
cin>>data;
while(data!=-1)
{
insertTree(root,data);
cin>>data;
}
printTree(root);
cout<<endl;
cout<<"请输入你要寻找的两个数据"<<endl;
cin>>i>>j;
findfather(root,i,j);
system("PAUSE");
return 0;
}
可能有点问题