排序二叉树问题!

2025-05-09 22:45:06
推荐回答(2个)
回答1:

二叉排序树又叫二叉查找树。

它的定义:

1、若根结点的左子树非空,则左子树上所有结点的关键字值均小于等于根结点的关键字值。
2、若根结点的右子树非空,则右子树上所有结点的关键字值均大于等于根结点的关键字值。
3、根结点的左、右子树也分别为二叉排序树。

中序遍历后得到一个有序的序列;

下面是实现的程序

/************************************************************************/
/* 题目:控制台下二叉排序树的建立,中序遍历 */
/* 时间:2010-3-11 上午10时9分 */
/* coder:huifeng00 */
/************************************************************************/
#include
#include
using namespace std;

typedef struct node
{
int element;
struct node* left;
struct node* right;
}Node,*NodePtr;

void insertNode(NodePtr *head,int data)//插入节点,注意这用了指向指针的指针,很有意思
{
if (*head==NULL)
{
*head=new Node;
(*head)->element=data;
(*head)->left=NULL;
(*head)->right=NULL;
}
else
{
if (data<=(*head)->element)
{
insertNode(&((*head)->left),data);
}
else
{
insertNode(&((*head)->right),data);
}
}
}
NodePtr creatTree()//构造二叉排序树,控制台下输入整数,0表示结束输入
{
NodePtr head=NULL;
int data;
scanf("%d",&data);
while(data!=0)
{
insertNode(&head,data);
scanf("%d",&data);
}
return head;

}

void printTree(NodePtr head)//中序遍历二叉排序树,得到有序序列
{
if(head!=NULL)
{
printTree(head->left);
printf("%d ",head->element);
printTree(head->right);
}

}

int main()
{
NodePtr head;
printf("请输入一串整数,空格隔开,0表示输入结束\n");
head=creatTree();
printf("中序遍历二叉排序树\n");
printTree(head);
printf("\n");
return 0;
}

运行结果,可以查看
http://hi.baidu.com/huifeng00/blog/item/d6b9c837d0997180a61e129d.html

回答2:

1.排序二叉树的特点是左子树所有的节点值均小于根节点值,右子树的节点值均大于根节点值,从而进行中序遍历的结果就是一个有序序列
2.有很多方式建立该顺序序列的排序二叉树,例如:
4
3 5
1 9
等~~~~