zoukankan      html  css  js  c++  java
  • 【数据结构】Java实现二叉树遍历(非递归)

    以二叉排序树来建立的一棵二叉树,然后用先序,中序,后序非递归遍历

    package DataStructure;
    
    import java.util.Stack;  
    
    public class BinaryTree {   
    
        private Node root;
    
        class Node{
            int data;
            Node left;
            Node right;
            public Node(int data){
                this.data = data;
                this.left = null;
                this.right= null;
               }
           }
           //构建一棵二叉树
           public BinaryTree(){
               root = null;
           }
    
           //二叉树添加节点
           public void buildTree(Node node,int data){
               if(root == null){
                   root = new Node(data);
               }else{
                   if(data>node.data){
                       if(node.right==null){
                           node.right=new Node(data);
                       }else{
                           buildTree(node.right,data);
                       }
                   }else{
                       if(node.left==null){
                           node.left=new Node(data);
                       }else{
                           buildTree(node.left,data);
                       }
                   }
               }
           }
    
        //前序遍历的非递归实现  
        public void PreOrder(Node n){  
            Stack<Node> stack=new Stack<Node>();  
            Node node=n;  
            while(node!=null||stack.size()>0){  
                while(node!=null){  
                    visted(node);  
                    stack.push(node);  
                    node=node.left;  
                }   
                    node=stack.pop();  
                    node=node.right;    
            }  
        }      
        //中序遍历的非递归实现  
        public void InOrder(Node n){  
            Stack<Node> stack =new Stack<Node>();  
            Node node =n;  
            while(node!=null||stack.size()>0){  
                //存在左子树  
                while(node!=null){  
                    stack.push(node);  
                    node=node.left;  
                }  
                //栈非空  
                if(stack.size()>0){  
                    node=stack.pop();  
                    visted(node);  
                    node=node.right;  
                }  
            }  
        }        
      //  后序遍历的非递归实现  
        public void PostOrder(Node p){  
            Stack<Node> stack=new Stack<Node>();  
            Node node =p;  
            while(p!=null){  
                for(;p.left!=null;p=p.left){  
                    stack.push(p);  
                }  
                while(p!=null&&(p.right==null||p.right==node)){  
                    visted(p);    
                    node =p;  
                    if(stack.empty())  
                        return;  
                    p=stack.pop();  
                }  
                stack.push(p);  
                p=p.right;  
            }  
        }  
        public void visted(Node node){  
            System.out.print(" "+node.data);;  
        } 
    
           public static void main(String[] args){
               int a[]={62,88,58,47,35,73,51,99,37,93};
               BinaryTree bt = new BinaryTree();
               for(int i=0;i<a.length;i++){
                   bt.buildTree(bt.root, a[i]);
               }
               System.out.println("先序遍历结果:");
               bt.PreOrder(bt.root);
               System.out.println();
               System.out.println("中序遍历结果:");
               bt.InOrder(bt.root);
               System.out.println();
               System.out.println("后序遍历结果:");
               bt.PostOrder(bt.root);
               System.out.println();
           }
        }    

    这里写图片描述

  • 相关阅读:
    CSS 文档流布局以及盒子模型
    CSS样式继承和样式权重
    CSS选择器餐厅练习
    node.js读写json文件
    C#单例模式的2种实现方式,Lazy模式和双检锁模式
    The Entity Framework provider type 'MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.18.0,
    mysql主从配置
    nginx 限制ip并发数,nginx限制IP连接数的范例参考
    certbot 调用cloudflare api申请证书
    proxy_pass url 反向代理的坑
  • 原文地址:https://www.cnblogs.com/yankang/p/6399035.html
Copyright © 2011-2022 走看看