栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二叉树层序、前中后序遍历(递归、迭代)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树层序、前中后序遍历(递归、迭代)

        二叉树的遍历经常在笔试或者面试的时候需要遇到,本文实现了二叉树的前中后序的递归与迭代两种算法、层序遍历使用迭代的方式实现了单个list场景以及双重list场景的实现方式。

package t1;

import java.util.*;

public class LevelOrder {
	ArrayList> list = new ArrayList<>(); 
	
	//前中后遍历  递归调用
	public static void order(TreeNode root,Queue queue){
		if(root == null) {
			return;
		}
    //前序遍历
		queue.add(root.val);
		order(root.left,queue);
    //中序遍历
        //queue.add(root.val);
        order(root.right,queue);
    //后序遍历
        //queue.add(root.val);
        
	}
	
	//前序遍历迭代
	public static ArrayList preOreder(TreeNode root){
		if(root == null) {
			return null;
		}
		Stack stack = new Stack<>();
		ArrayList list = new ArrayList<>();
		stack.add(root);
		while(!stack.isEmpty()) {
			root = stack.pop();
			list.add(root.val);
			if(root.right != null) {
				stack.push(root.right);
			}
			if(root.left != null) {
				stack.push(root.left);
			}
		}
		return list;
	}
	//中序遍历
	public static ArrayList midOrder(TreeNode root){
		ArrayList list = new ArrayList<>();
		Stack stack = new Stack<>();
		while(!stack.isEmpty() || root != null) {
			if(root != null) {
				stack.push(root);
				root = root.left;
			}else {
				root = stack.pop();
				list.add(root.val);
				root = root.right;
			}
		}
		return list;
	}
	
	//后序遍历
	public static ArrayList postOrder(TreeNode root){
		
		ArrayList list = new ArrayList<>();
		Stack stack = new Stack<>();
		TreeNode pre = null;
		while(!stack.isEmpty()||root != null ) {
			while(root != null) {
				stack.push(root);
				root = root.left;
			}
		
		root = stack.pop();
		if(root.right == null || root.right == pre) {
			list.add(root.val);
			pre = root;
			root = null;
		}else {
			stack.push(root);
			root = root.right;
		}
		}
		return list;
		
	}
	//层序遍历 双重list(迭代)
    public static ArrayList> levelOrder(TreeNode root){
    	ArrayList> list = new ArrayList<>();
    	Queue queue = new LinkedList<>();
    	if(root == null) {
    		return null;
    	}
    	queue.add(root);
    	while(!queue.isEmpty()) {
    		int size = queue.size();
    		ArrayList temp = new ArrayList<>();
    		for(int i = 0; i < size; i++) {
    			TreeNode node= queue.poll();
    			temp.add(node.val);
    			if(node.left != null) {
    				queue.add(node.left);
    			}
    			if(node.right != null) {
    				queue.add(node.right);
    			}
    		}
    		list.add(temp);
    	}
		return list;
    }
    //层序遍历  单个list返回(迭代)
    public static ArrayList or(TreeNode root){
    	if(root == null) {
    		return null;
    	}
    	ArrayList list = new  ArrayList<>();
    	Queue queue = new LinkedList<>();
    	queue.add(root);
    	while(!queue.isEmpty()) {
    		TreeNode node = queue.poll();
    		list.add(node.val);
    		if(node.left != null) {
    			queue.add(node.left);
    		}
    		if(node.right != null) {
    			queue.add(node.right);
    		}
    	}
		return list;
    	
    }
    public static void main(String[] args) {
        //创建二叉树
        TreeNode t = new TreeNode(1);
        t.left = new TreeNode(2);
        t.right = new TreeNode(3);
        t.left.left = new TreeNode(4);
        t.left.left.right = new TreeNode(5);
        t.right.left = new TreeNode(6);
        t.right.right = new TreeNode(7);
        //执行层序遍历方法
//        ArrayList>  lists = LevelOrder.levelOrder(t);
//        
//        System.out.println(lists);
//        ArrayList lis = or(t);
//        System.out.println(lis);
//        Queue q = new LinkedList<>();
//        LevelOrder.order(t, q);
//        System.out.println(q);
//        ArrayList list2 = preOreder(t);
//        System.out.println(list2);
        
//        ArrayList list3 = midOrder(t);
//        System.out.println(list3);
        
        ArrayList list4 = postOrder(t);
        System.out.println("4"+list4);
        
	}
}


class TreeNode {
    int val; //结点值
    TreeNode left; //左子树结点
    TreeNode right; //右子树结点

    public TreeNode(int val) {
        this.val = val;
    }
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921821.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号