zoukankan      html  css  js  c++  java
  • 二叉树(前序,中序,后序遍历)查找

    二叉树(前序,中序,后序遍历)查找

    树的结点

    /**
     * 树的结点
     */
    public class TreeNode {
        private Object obj;
        private TreeNode leftNode;
        private TreeNode rightNode;
    
        public TreeNode(Object obj) {
            this.obj = obj;
            this.leftNode=null;
            this.rightNode=null;
        }
    
        public Object getObj() {
            return obj;
        }
    
        public void setObj(Object obj) {
            this.obj = obj;
        }
    
        public TreeNode getLeftNode() {
            return leftNode;
        }
    
        public void setLeftNode(TreeNode leftNode) {
            this.leftNode = leftNode;
        }
    
        public TreeNode getRightNode() {
            return rightNode;
        }
    
        public void setRightNode(TreeNode rightNode) {
            this.rightNode = rightNode;
        }
    }
    

    二叉树

    public class BinaryTree {
        private TreeNode root;
        private TreeNode searchNode;
        Scanner scanner = new Scanner(System.in);
    
    
        public BinaryTree() {
            System.out.println("输入!~结束输入");
            this.inputTree(null);
        }
    
        public TreeNode getRoot() {
            return root;
        }
    
        public void setRoot(TreeNode root) {
            this.root = root;
        }
    
        public void inputTree(TreeNode node) {
            if (this.root == null) {
                System.out.print("请输入根节点:");
                String next = scanner.next();
                this.root = new TreeNode(next);
                inputTree(this.root);
                return;
            }
            System.out.print("请输入" + node.getObj() + "的左孩子节点:");
            String nextL = scanner.next();
            if (!"!~".equals(nextL)) {
                node.setLeftNode(new TreeNode(nextL));
                inputTree(node.getLeftNode());
            }
    
    
            System.out.print("请输入" + node.getObj() + "的右孩子节点:");
            String nextR = scanner.next();
            if (!"!~".equals(nextR)) {
                node.setRightNode(new TreeNode(nextR));
                inputTree(node.getRightNode());
    
            }
    
        }
    
    
        /**
         * 前序遍历
         */
        public void preorderTraversal(TreeNode node) {
            if (node == null) return;
            else {
                System.out.print(node.getObj() + " ");
                preorderTraversal(node.getLeftNode());
                preorderTraversal(node.getRightNode());
            }
        }
    
        /**
         * 中序遍历
         */
        public void inOrderTraversal(TreeNode node) {
            if (node == null) return;
            else {
                inOrderTraversal(node.getLeftNode());
                System.out.print(node.getObj() + " ");
                inOrderTraversal(node.getRightNode());
            }
        }
    
        /**
         * 后序遍历
         */
        public void postOrderTraversal(TreeNode node) {
            if (node == null) return;
            else {
    
                postOrderTraversal(node.getLeftNode());
                postOrderTraversal(node.getRightNode());
                System.out.print(node.getObj() + " ");
            }
        }
    
         /**
         * 查找
         */
        public TreeNode searchNode(Object object){
            preorderSearch(this.root,object);
            return searchNode;
        }
    
         /**
         * 用于查找遍历
         */
        public void preorderSearch(TreeNode node,Object object){
          if (searchNode!=null||node==null) return ;
          else  {
              if (node.getObj().equals(object)) this.searchNode=node;
              preorderSearch(node.getLeftNode(),object);
              preorderSearch(node.getRightNode(),object);
    
          }
    
    
        }
    }
    
    

  • 相关阅读:
    ES6之6种遍历对象属性的方法
    css自定义滚动条样式,自定义文字选择样式,设置文字不被选择
    js img转换base64
    移动端rem造成的很多问题
    移动端边框1像素的问题
    【小练习1】如何制作“表单”
    2015-09-24 第六节课 (CSS补充和html 标签讲解、浏览器兼容性)
    2015-09-22 第四节课 CSS块级元素 行内元素 浮动 盒子模型 绝对定位、相当定位和固定定位
    2015-09-21 第三节课 css属性 border(边框)、background(背景)
    html你可能还不知道的一些知识点
  • 原文地址:https://www.cnblogs.com/huangshen/p/13362293.html
Copyright © 2011-2022 走看看