zoukankan      html  css  js  c++  java
  • 二叉树的建立&&前中后遍历(递归实现)&&层次遍历

    下面代码包含了二叉树的建立过程,以及三种遍历方法了递归实现,代码中还利用队列实现了层次遍历。

    import java.util.LinkedList;
    import java.util.Queue;
    
    class TreeNode<K> {
        TreeNode<K> left, right;
        K key;
        public TreeNode(K k) {
            left = null; right = null; key = k;
        }
    }
    
    class BinaryTree<K extends Comparable<K> > { //添加 extends Comparable<K>后,K对象可以进行比较。
        TreeNode<K> root;
        public BinaryTree() {
            root = null;
        }
        public void createTree(TreeNode<K> node, K data) { //建立二叉树
            if(root == null) {
                root = new TreeNode<K>(data);
            } else {
                if(data.compareTo(node.key) < 0) {
                    if(node.left == null)
                        node.left = new TreeNode<K>(data);
                    else
                        createTree(node.left, data);
                } else {
                    if(node.right == null)
                        node.right = new TreeNode<K>(data);
                    else
                        createTree(node.right, data);
                }
            }
        }
        public void preOrder(TreeNode<K> root) { //前序遍历
            if(root != null) {
                System.out.println(root.key);
                preOrder(root.left);
                preOrder(root.right);
            }
        }
        public void inOrder(TreeNode<K> root) { //中序遍历
            if(root != null) {
                inOrder(root.left);
                System.out.println(root.key);
                inOrder(root.right);
            }
        }
        public void postOrder(TreeNode<K> root) { //后序遍历
            if(root != null) {
                postOrder(root.left);
                postOrder(root.right);
                System.out.println(root.key);
            }
        }
        public void levelOrder(TreeNode<K> root) { //层次遍历
            if(root != null) {
                Queue<TreeNode<K>> queue = new LinkedList<TreeNode<K>>();
                queue.offer(root);
                while (!queue.isEmpty()) {
                    TreeNode<K> node = queue.poll();
                    System.out.println(node.key);
                    if(node.left != null)
                        queue.offer(node.left);
                    if(node.right != null)
                        queue.offer(node.right);
                }
            }
        }
    }
    public class TestClass {
        public static void main(String[] args) {
            int[] array = {6, 8, 7, 5, 2, 5};
            BinaryTree<Integer> bt = new BinaryTree<Integer>();
            for (int i = 0; i < array.length; i++) {
                bt.createTree(bt.root, array[i]);
            }
    //        bt.preOrder(bt.root);
    //        bt.inOrder(bt.root);
    //        bt.postOrder(bt.root);
            bt.levelOrder(bt.root);
        }
    }
  • 相关阅读:
    Redis 分区
    利用phpexcel把excel导入数据库和数据库导出excel实现
    Phpcms V9网站从本地上传到服务器需要修改的地方
    PHPcms怎么调用二级栏目
    phpcms调用一级栏目和二级栏目
    [v9] 列表页 调用 正文内容 或 自定义 字段(moreinfo的调用方法)
    phpcms v9最常用的22个调用代码
    phpcms_v9 多图字段 内容页,首页,分页自定义字段调用
    JS常用语句
    phpcms v9中调用栏目及调用多个子栏目中的文章列表
  • 原文地址:https://www.cnblogs.com/lasclocker/p/4858898.html
Copyright © 2011-2022 走看看