二叉树排序算法

树的特征:左孩子<父节点<右孩子。
先构造树,然后中序遍历。
算法实现:

public class BinaryTreeSort {
    private Node root;
    public class Node{
        private int value;
        private Node left;
        private Node right;
        Node(int value){
            this.value=value;
        }
        public void addNode(Node node){
            if(node.value<this.value){
                if(this.left!=null){
                    this.left.addNode(node);
                }
                else
                {
                    this.left=node;
                }
            }
            else
            {
                if(this.right!=null){
                    this.right.addNode(node);
                }
                else
                {
                    this.right=node;
                }
            }
        }
        public void outPut(){
            if(this.left!=null){
                this.left.outPut();
            }
            System.out.println(this.value);
            if(this.right!=null){
                this.right.outPut();
            }
        }
    }
    public void add(int value){
        Node node=new Node(value);
        if(this.root!=null)
        {
            this.root.addNode(node);
        }
        else
        {
            this.root=node;
        }
    }
    public void out(){
        root.outPut();
    }
    public static void main(String[]args){
        int[]arr={36,4,6,7,4,2,4564,45,31,3,654,46};
        BinaryTreeSort sorter=new BinaryTreeSort();
        for(int i=0;i<arr.length;i++){
            sorter.add(arr[i]);
        }
        sorter.out();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ST语言写二叉树排序算法可以这样实现:procedure sort(var a: array of integer); var root, cur, prev: ^Node; begin new(root); root^.data := a[0]; prev := root; for i := 1 to length(a) - 1 do begin new(cur); cur^.data := a[i]; cur^.parent := prev; if a[i] < prev^.data then prev^.left := cur else prev^.right := cur; prev := cur; end; inorder(root); end; procedure inorder(p: ^Node); begin if p <> nil then begin inorder(p^.left); write(p^.data); inorder(p^.right); end; end; ### 回答2: ST(Structured Text)语言是一种类似于Pascal的高级程序设计语言,常用于基于PLC(Programmable Logic Controller)的工控系统编程。在ST语言中,可以利用递归的方式来实现二叉树排序算法。 下面是用ST语言写二叉树排序算法的示例代码: PROGRAM BinarySearchTreeSort VAR root: POINTER TO Node; // 定义二叉树的根节点指针 // 定义节点结构体 Node: RECORD value: INT; // 节点的值 left: POINTER TO Node; // 左子节点指针 right: POINTER TO Node; // 右子节点指针 END_RECORD; // 插入节点到二叉树中的函数 FUNCTION InsertNode(VAR current: POINTER TO Node; value: INT): POINTER TO Node; BEGIN IF current = NIL THEN // 如果当前节点为空,则创建一个新节点并赋予其值 NEW(current); current^.value := value; current^.left := NIL; current^.right := NIL; ELSE // 如果当前节点不为空,则根据值的大小递归插入左子树或右子树 IF value < current^.value THEN current^.left := InsertNode(current^.left, value); ELSE current^.right := InsertNode(current^.right, value); END_IF; END_IF; RETURN current; END_FUNCTION; // 中序遍历二叉树的函数 PROCEDURE InOrderTraversal(node: POINTER TO Node); BEGIN IF node <> NIL THEN InOrderTraversal(node^.left); // 遍历左子树 // 输出当前节点的值 Print(' ', node^.value); InOrderTraversal(node^.right); // 遍历右子树 END_IF; END_PROCEDURE; // 主程序 VAR values: ARRAY[1..10] OF INT := [4, 2, 5, 1, 3, 6, 8, 7, 10, 9]; // 待排序的数组 i: INT; sortedTree: POINTER TO Node; BEGIN // 创建二叉树并插入节点 sortedTree := NIL; FOR i := 1 TO 10 DO sortedTree := InsertNode(sortedTree, values[i]); END_FOR; // 中序遍历二叉树并输出排序后的结果 Print('排序后的结果:'); InOrderTraversal(sortedTree); END_PROGRAM; 以上代码实现了一个二叉树排序算法。通过创建二叉树,并根据节点的值大小递归插入左子树或右子树,最后通过中序遍历二叉树可以得到排序后的结果。示例中给定了一个包含10个元素的数组,代码会将数组中的元素按照顺序插入到二叉树中,并输出排序后的结果。 ### 回答3: ST语言是Structured Text的缩写,是一种用于编写PLC(Programmable Logic Controller,可编程逻辑控制器)程序的编程语言。下面是使用ST语言编写二叉树排序算法的示例代码: VAR Type TreeNode : STRUCT Left : POINTER TO TreeNode; Value : INT; Right : POINTER TO TreeNode; END_STRUCT; treeRoot : POINTER TO TreeNode; sortedValues : ARRAY[1..N] OF INT; index : INT; PROCEDURE InsertNode(VAR root : POINTER TO TreeNode; value : INT); VAR tempNode : POINTER TO TreeNode; BEGIN IF root = NIL THEN NEW(root); root^.Left := NIL; root^.Value := value; root^.Right := NIL; ELSE IF value < root^.Value THEN InsertNode(root^.Left, value); ELSE InsertNode(root^.Right, value); END_IF; END_IF; END_PROCEDURE; PROCEDURE InOrderTraversal(node : POINTER TO TreeNode); BEGIN IF node <> NIL THEN InOrderTraversal(node^.Left); sortedValues[index] := node^.Value; index := index + 1; InOrderTraversal(node^.Right); END_IF; END_PROCEDURE; PROCEDURE BinaryTreeSort(values : ARRAY_OF_INT; size : INT); VAR i : INT; BEGIN index := 1; FOR i := 1 TO size DO InsertNode(treeRoot, values[i]); END_FOR; InOrderTraversal(treeRoot); END_PROCEDURE; END_VAR 请注意,以上代码只是一个示例,具体实现还需要根据PLC的具体规格和要求进行调整。另外,代码中使用的变量和数据类型也只是示例,请根据实际情况进行相应的更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值