• 非递归方式遍历二叉树


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

      

  • 相关阅读:
    单相全桥逆变电路工作过程
    单片机实用工具大全
    电路元件
    IC SPEC相关数据
    庖丁解牛,经典运放电路分析
    microstrip(微带线)、stripline(带状线) 指什么?
    [转]关于时钟线/数据线/地址线上串联电阻及其作用
    正激变换电路工作原理
    从Buck-Boost到Flyback
    [转载].关于耦合电容、滤波电容、去耦电容、旁路电容作用
  • 原文地址:https://www.cnblogs.com/wangxiaowang/p/7818796.html
Copyright © 2020-2023  润新知