• 非递归方式遍历二叉树


      /**
         * 非递归方式的先根序
         * @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;
    	}
    
    }
    

      

  • 相关阅读:
    jQuery 1.6 正式版发布
    EXT.NET Toolbar GridPanel自动宽度和高度的解决方案,引入Viewport
    sql server 2005 数据库状态 变成 可疑的解决方案
    将远程图片读取到本地,并保存
    ^M 替换 VI
    php ctags
    闲来无聊,想了下秒杀、抢购实现方法
    mysql 'OR','IN',‘union’效率分析
    js 全选
    yii rule
  • 原文地址:https://www.cnblogs.com/wangxiaowang/p/7818796.html
Copyright © 2020-2023  润新知