zoukankan      html  css  js  c++  java
  • 非递归方式遍历二叉树

      /**
         * 非递归方式的先根序
         * @param root
         */
        public static void preOrder(Node root){
            Stack<Node> stack = new Stack<Node>();
            while (!stack.isEmpty() || root != null) {
            	while (root != null) {
            		System.out.println(root.data);
            		stack.push(root);
            		root = root.left;
            	}
            	
            	if (!stack.isEmpty()) {
            		root = stack.pop();
            		root = root.right;
            	}
            }
            
        }
        
        /**
         * 非递归的方式中根序遍历二叉树
         * @param node
         */
        public static void orderBinaryTree(Node node) {
        	Stack<Node> stack = new Stack<Node>();
        	Node point = node;
        	while (!stack.isEmpty() || point != null) {
        		//如果左子树不为空,则一直入栈
        		if (point != null) {
        			stack.push(point);
        			point = point.left;
        		} else {
        			point = stack.peek();
        			visit(point);
        			point = point.right;
        			stack.pop();
        		}
        	}
        }
        
        /**
         * 非递归方式后根序
         * @param node
         */
        public static void lastOrder(Node node) {
        	Stack<Node> stackNode = new Stack<Node>();
        	Stack<Integer> stackInt = new Stack<Integer>();
        	int i = 1;
        	while (!stackNode.isEmpty() || node != null) {
        		while(node != null) {
        			stackNode.push(node);
        			stackInt.push(0);
        			node = node.left;
        		}
        		while (!stackNode.isEmpty() && stackInt.peek() == i) {
        			stackInt.pop();
        			System.out.println(stackNode.pop().data);
        		}
        		
        		if (!stackNode.isEmpty()) {
        			stackInt.pop();
        			stackInt.push(1);
        			node = stackNode.peek();
        			node = node.right;
        		}
        	}
        }
        
    

      创建一棵二叉树:

    public class Node {
    	Node left = null;
    	Node right = null;
    	Integer data;
    	/**
    	 * 
    	 * @param root
    	 */
    	public Node() {
    		this.left = null;
    		this.right = null;
    		this.data = null;
    	}
    	
    	public Node(Integer data) {
    		this.left = null;
    		this.right= null;
    		this.data = data;
    	}
    
    }
    

      

  • 相关阅读:
    CentOS安装系统时硬盘分区建议
    Linux下的gpt分区
    如何解决Win10账户没有了管理员权限
    redis数据的清空以及回滚
    禅道的作用以及安装
    Java数组的内存图
    Java中的内存划分
    进制
    Java数组
    Java方法的重载(Overload)
  • 原文地址:https://www.cnblogs.com/wangxiaowang/p/7818796.html
Copyright © 2011-2022 走看看