二叉树排序

插入数据并按顺序输出(就是中序遍历----左中右)
如图
假设通过二叉树对如下10个随机数进行排序
37,9,16,34,29,6,48,46,59
排序的第一个步骤是把数据插入到该二叉树中
插入基本逻辑是,小、相同的放左边,大的放右边中序遍历输出即为从小到大顺序

在这里插入图片描述

package nnn;
import java.util.*;
public class node {
	public node left;
	public node right;
	public Object value;//存空,所以用Object
	public void add(Object num){
		 // 如果当前节点没有值,就把数据放在当前节点上
		if(value==null)
			value=num;
		// 如果当前节点有值,就进行判断,新增的值与当前值的大小关系
		else{
			// 新增的值,比当前值小或者相同
			if((Integer)num-((Integer)value)<=0){
				if(left==null)
				left=new node();
				left.add(num);
			}
			else{
				if(right==null)
				right=new node();
				right.add(num);
			}
		}	
	}
	public List<Object> values(){
		List<Object> values = new ArrayList<>();
	    if(left!=null)
            values.addAll(left.values());//等于把左子树的所有递归得到的值存到容器中
	    values.add(value);
	    if(right!=null)
	    	values.addAll(right.values());
	    return values;
	}

	public static void main(String[] args) {
		int p[]=new int[]{37,9,16,34,29,6,48,46,59};
		  node S=new node();
		  for(int number:p){
			  S.add(number);
		  }	
		  System.out.println(S.values());//从根开始便利
	}
}

输出(为从小到大的终须排序)
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉树排序是一种基于二叉树数据结构的排序算法,其基本原理是将待排序元素按照一定的规则插入到一棵空的二叉树中,然后按照中序遍历的顺序将元素输出,即可得到有序的序列。 下面是使用C语言实现二叉树排序的示例代码: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结构体 typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; // 向二叉树中插入一个元素 TreeNode* insert(TreeNode* root, int val) { if (root == NULL) { root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = val; root->left = NULL; root->right = NULL; } else if (val < root->val) { root->left = insert(root->left, val); } else { root->right = insert(root->right, val); } return root; } // 中序遍历二叉树,输出有序序列 void inorder(TreeNode* root) { if (root != NULL) { inorder(root->left); printf("%d ", root->val); inorder(root->right); } } int main() { TreeNode* root = NULL; int n, val; printf("请输入待排序元素的个数:"); scanf("%d", &n); printf("请输入待排序的元素:"); for (int i = 0; i < n; i++) { scanf("%d", &val); root = insert(root, val); } printf("排序后的序列为:"); inorder(root); printf("\n"); return 0; } ``` 在上面的代码中,我们定义了一个二叉树结构体 TreeNode,其中包含节点的值 val,以及左右子节点的指针 left 和 right。insert 函数用于向二叉树中插入一个元素,它的实现过程就是将待插入元素与当前节点的值进行比较,如果小于当前节点的值,则递归地将元素插入到当前节点的左子树中,否则递归地将元素插入到当前节点的右子树中。inorder 函数用于中序遍历二叉树,并输出有序序列。 最后,在 main 函数中,我们先读入待排序元素的个数,然后逐个读入元素并插入到二叉树中,最后调用 inorder 函数输出排序后的序列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值