zoukankan      html  css  js  c++  java
  • 二叉树的遍历(递归、非递归)

    理论:

    1.先(根)序遍历的递归定义:
    若二叉树非空,则依次执行如下操作:
    ⑴ 访问根结点;
    ⑵ 遍历左子树;
    ⑶ 遍历右子树。
    2.中(根)序遍历的递归算法定义:
    若二叉树非空,则依次执行如下操作:
    ⑴遍历左子树;
    ⑵访问根结点;
    ⑶遍历右子树。
    3.后(根)序遍历得递归算法定义:
    若二叉树非空,则依次执行如下操作:
    ⑴遍历左子树;
    ⑵遍历右子树;
    ⑶访问根结点

    java实现

    package 二叉树;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Stack;
    
    public class BSTree {
        
        private    List<Node>nodeList=new ArrayList<Node>();
     public Node CreateTree(int[] a){
            for(int data:a)
                nodeList.add(new Node(data));
            
            int lastLeftRoot=a.length/2-1;
            
            for(int i=lastLeftRoot; i>=0; i--)
            {
                Node root=nodeList.get(i);
                
                int leftIndex=i*2+1;
                int rightIndex=leftIndex+1;
                if(leftIndex<a.length);
                {
                    Node left=nodeList.get(leftIndex);
                    root.setLeft(left);
                }
                if(rightIndex<a.length)
                {
                    Node right=nodeList.get(rightIndex);
                    root.setRgiht(right);
                }
            }
            Node root=nodeList.get(0);
            return root;
        }
        
    
        
        public static void printNode(Node node){
            System.out.print(node.getData()+" ");
        }
        
        public static void preOrderStack(Node node){
            Stack<Node> stack=new Stack<Node>();
            Node p=node;
            if(node!=null)
            {
                stack.push(p);
                while(!stack.isEmpty())
                {
                    Node top=stack.pop();
                    printNode(top);
                    if(top.getRight()!=null) stack.push(top.getRight());
                    if(top.getLeft()!=null) stack.push(top.getLeft());
                }
            }
        }
        
        public static void minOrderStack(Node node){
            Stack<Node> stack=new Stack<Node>();
            Node p=node;
            while(p!=null ||!stack.isEmpty())
            {
                while(p!=null)
                {
                    stack.push(p);
                    p=p.getLeft();
                }
                if(!stack.isEmpty())
                {
                    p=stack.pop();
                    printNode(p);
                    p=p.getRight();
                }
            }
        }
        
        public static void postOrderStack(Node node){
            Stack<Node> stack=new Stack<Node>();
            Node p=node;
            Node q=p;
            while(p!=null)
            {
                while(p.getLeft()!=null)
                {
                    stack.push(p);
                    p=p.getLeft();
                }
    
            while(p!=null&&(p.getRight()==null||p.getRight()==q))
            {  
                printNode(p);  
                q=p;  
                if(stack.isEmpty())return;  
                p=stack.pop();  
                 }
                stack.push(p);
                p=p.getRight();
            }
        }
        public static void preTrav(Node node){
            if(node==null)
                return;
            System.out.print(node.getData()+" ");
            preTrav(node.getLeft());
            preTrav(node.getRight());
        }
        public static void midTrav(Node node){
            if(node==null)
                return;
            midTrav(node.getLeft());
            System.out.print(node.getData()+" ");
            midTrav(node.getRight());
        }
        public static void postTrav(Node node){
            
            if(node==null)
                return;
            postTrav(node.getLeft());
            postTrav(node.getRight());
            System.out.print(node.getData()+" ");
        }
    public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] a={10,6,14,4,8,12,16};//这些数据是按二叉查找树的层次遍历存放
            BSTree bt=new BSTree();
            Node root=bt.CreateTree(a);
            preTrav(root);
            System.out.println();
            preOrderStack(root);
            System.out.println();
            midTrav(root);
            System.out.println();
            minOrderStack(root);
            System.out.println();
            postTrav(root);
            System.out.println();
            postOrderStack(root);
            System.out.println();
            
        }
    
    }
  • 相关阅读:
    visual studio 2010设置
    Win7 x64 PL/SQL 连接 Oralce 提示 Could not initialize "%ORACLE_HOME%\bin\oci.dll"
    jxl导入/导出excel
    struts2的action与jsp之间传递参数
    web服务器、容器和中间件
    myeclipse trial expired 注册码解决办法(可用于8.5)
    Java中的内部类
    JS的trim()方法
    struts2 <s:property>用法
    EL表达式的使用
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4006229.html
Copyright © 2011-2022 走看看