zoukankan      html  css  js  c++  java
  • Java二叉树实现及递归与非递归遍历实现

    树的遍历分两种:
    1、深度优先遍历
    1.1 递归算法实现
    2.2 非递归算法实现(使用栈存储)
    2、广度优先遍历(使用队列存储)

    import java.util.*;
    
    /**
     * 类功能描述: 二叉树遍历算法Java实现
     *
     * @version 1.0.0
     * @auther Create by Barry
     * @date Create on 2018/3/12.
     * @history
     */
    public class BinaryTree {
        private Node root;
        private BinaryTree(Object data){
            this.root = new Node(data, null, null);
        }
    
        /**
         * 1、 深度优先遍历
         * 1.1 递归先序遍历
         */
        public void preOrderTraverse(Node root){
            System.out.println(root.data);
            preOrderTraverse(root.leftChild);
            preOrderTraverse(root.rightChild);
        }
    
        /**
         * 1、 深度优先遍历
         * 1.2 实现非递归先序遍历
         */
        public void preOrder(){
            Stack stack = new Stack();
            System.out.println(root.data);
            stack.push(root);
            while(!stack.isEmpty()){
                Node element = (Node)stack.pop();
                System.out.println(element.data);
                if(element.rightChild != null){
                    stack.push(element.rightChild);
                }
                if(element.leftChild != null){
                    stack.push(element.leftChild);
                }
            }
        }
    
        /**
         * 2、 广度优先遍历
         */
        public List<Node> breadthTraverse(Node root){
            List<Node> allNodes = new LinkedList<>();
            if(root == null){
                return allNodes;
            }
            Deque<Node> queue = new ArrayDeque<>();
            queue.add(root);
            while(!queue.isEmpty()){
                Node currentNode = queue.poll();
                allNodes.add(currentNode);
                if(currentNode.leftChild != null){
                    queue.add(currentNode.leftChild);
                }
                if(currentNode.rightChild != null){
                    queue.add(currentNode.rightChild);
                }
            }
            return allNodes;
        }
    
        class Node{
            private Object data;
            private Node leftChild;
            private Node rightChild;
            public Node(Object data, Node leftChild, Node rightChild){
                this.data = data;
                this.leftChild = leftChild;
                this.rightChild = rightChild;
            }
        }
    }
  • 相关阅读:
    WebMatrix简介与预览
    使用NuGet增加常见包引用
    用Jquery实现的一个Table的帮助js
    使用AspNetPager进行存储过程分页
    Android之旅AppWidget
    SQL积累
    【问题记录】Asp.net WebApplication和WebSite中用户控件的使用区别
    ActionScript 3.0工厂模式实例
    ActionScript 3.0 实现单态模式
    装饰器模式小结
  • 原文地址:https://www.cnblogs.com/barrywxx/p/8552879.html
Copyright © 2011-2022 走看看