• 二叉树的遍历,递归和非递归


    class TreeNode {
    	public int val;
    	public TreeNode left;
    	public TreeNode right;
    	public TreeNode(int val)
    	{
    		this.val = val;
    	}
    }
    public class BinaryTree
    {
    	//先序遍历递归
    	public static void preOrder(TreeNode t)
    	{
    		if(t == null)
    		{
    			return;
    		}
    		System.out.print(t.val+" ");
    		preOrder(t.left);
    		preOrder(t.right);
    	}
    	//中序遍历递归
    	public static void inOrder(TreeNode t)
    	{
    		if(t == null)
    		{
    			return;
    		}
    		inOrder(t.left);
    		System.out.print(t.val+" ");
    		inOrder(t.right);
    	}	
    	//后序遍历递归
    	public static void postOrder(TreeNode t)
    	{
    		if(t == null)
    		{
    			return;
    		}
    		postOrder(t.left);
    		postOrder(t.right);
    		System.out.print(t.val+" ");
    	}	
    	
    	
    	//先序遍历非递归
    	public static void preOrder2(TreeNode t)
    	{
    		Stack<TreeNode> s = new Stack<>();
    		while(t!=null || !s.isEmpty())
    		{
    			while(t != null)//遍历根节点和左子树
    			{
    				System.out.print(t.val+" ");
    				s.push(t);
    				t = t.left;
    			}
    			if(!s.isEmpty())//遍历右孩子
    			{
    				TreeNode temp = s.pop();
    				t = temp.right;
    			}
    		}
    	}
    	
    	//中序遍历非递归
    	public static void inOrder2(TreeNode t)
    	{
    		Stack<TreeNode> s = new Stack<>();
    		while(t!=null || !s.isEmpty())
    		{
    			while(t != null)
    			{
    				s.push(t);
    				t = t.left;
    			}
    			if(!s.isEmpty())
    			{
    				TreeNode temp = s.pop();
    				System.out.println(temp.val);
    				t = temp.right;
    			}
    		}
    	}
    	
    	//后序遍历非递归
    	public static void postOrder2(TreeNode t)
    	{
    		Stack<TreeNode> s = new Stack<>();
    		Stack<TreeNode> result = new Stack<>();//存储逆后序遍历结果
    		while(t != null || !s.isEmpty())
    		{
    			while(t != null)
    			{
    				s.push(t);
    				result.push(t);
    				t = t.right;
    			}
    			if(!s.isEmpty())
    			{
    				TreeNode temp = s.pop();
    				t = temp.left;
    			}
    		}
    		while(!result.isEmpty())
    		{
    			System.out.print(result.pop().val+" ");
    		}
    	}
    	
    	
    	//层序遍历
    	public static void levelTraverse(TreeNode t)
    	{
    		ArrayDeque<TreeNode> queue = new ArrayDeque<>();
    		if(t == null)
    		{
    			return;
    		}
    		queue.offer(t);
    		while(!queue.isEmpty())
    		{
    			TreeNode temp = queue.poll();
    			System.out.print(temp.val + " ");
    			if(temp.left != null)
    			{
    				queue.offer(temp.left);
    			}
    			if(temp.right != null)
    			{
    				queue.offer(temp.right);
    			}
    		}
    	}
    	
    	
    	//螺旋遍历
    	public static void spiralTraverse(TreeNode t)
    	{
    		Stack<TreeNode> s1 = new Stack<>();
    		Stack<TreeNode> s2 = new Stack<>();
    		if(t == null)
    		{
    			return;
    		}
    		s1.push(t);
    		while(!s1.isEmpty() || !s2.isEmpty())
    		{
    			while(!s1.isEmpty())
    			{
    				TreeNode temp = s1.pop();
    				System.out.print(temp.val+" ");
    				if(temp.right!=null)
    				{
    					s2.push(temp.right);
    				}
    				if(temp.left!=null)
    				{
    					s2.push(temp.left);
    				}
    			}
    			while(!s2.isEmpty())
    			{
    				TreeNode temp = s2.pop();
    				System.out.print(temp.val+" ");
    				if(t.left!=null)
    				{
    					s1.push(temp.left);
    				}
    				if(temp.right!=null)
    				{
    					s1.push(temp.right);
    				}
    			}
    		}
    	}
    }
    
  • 相关阅读:
    手写一个简易版的Vue-Router,包含VueRouter的基本功能
    Odoo14学习笔记(6) 报psycopg2.errors.UndefinedColumn问题解决办法
    Odoo14学习笔记(5) 通过onchange机制自动计算“工龄”
    Odoo14学习笔记(4) 通过计算字段Compute Field自动计算工龄
    Odoo14学习笔记(3) 使用_sql_constraints对字段做Unique约束
    Odoo14学习笔记(2) 创建一个新应用Application
    Odoo14学习笔记(1) 安装时报关系"ir_modul"不存在问题
    大叔学Spring Boot笔记(15)MyBatis-Plus中LambdaQueryWrapper的使用
    java 读取excel 神器easyPoi
    通过PROFINET实现S7-1200与CU320-2 PN S120通讯
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5719586.html
Copyright © 2020-2023  润新知