二叉树前中后层次遍历的非递归法
Posted roni-i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树前中后层次遍历的非递归法相关的知识,希望对你有一定的参考价值。
一、二叉树
非递归前序遍历
class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); if(root == null) return res; Stack<TreeNode> st = new Stack<>(); st.push(root); while(!st.empty()){ TreeNode node = st.pop(); res.add(node.val); if(node.right != null) st.push(node.right); if(node.left != null) st.push(node.left); } return res; } }
非递归中序遍历
class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); if(root == null) return res; Stack<TreeNode> st = new Stack<>(); TreeNode cur = root; while(!st.empty() || cur != null) { while(cur != null){ st.push(cur); cur = cur.left; } cur = st.pop(); res.add(cur.val); cur = cur.right; } return res; } }
非递归后序遍历
class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new LinkedList<>(); if(root == null) return res; Stack<TreeNode> st = new Stack<>(); st.push(root); while(!st.isEmpty()){ TreeNode node = st.pop(); res.add(0,node.val); if (node.left != null) st.push(node.left); if (node.right != null) st.push(node.right); } return res; } }
队列层次遍历
class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); if(root == null) return res; queue.add(root); while(!queue.isEmpty()){ List<Integer> list = new LinkedList<>(); int size = queue.size(); while(size-- > 0){ TreeNode node = queue.poll(); list.add(node.val); if(node.left!=null) queue.add(node.left); if(node.right!=null) queue.add(node.right); } res.add(list); } return res; } }
N叉树
以上是关于二叉树前中后层次遍历的非递归法的主要内容,如果未能解决你的问题,请参考以下文章