二叉树前序、中序、后序遍历非迭代解法

Love The Way You Lie 2022-12-10 07:27 211阅读 0赞

二叉树前序、中序、后序遍历非迭代解法

经常会有面试官,让你手撕二叉树的前序、中序、后序遍历,当你简单得写了递归的方法,

面试官看了看,慢悠悠得抛出你会迭代的解法吗?,这时候就需要阅读我这篇文章了。

前序和中序遍历,解决方法类似,都是使用栈解决的。后序遍历稍微复杂一点。

二叉树前序遍历

  1. class Solution {
  2. public List<Integer> preorderTraversal(TreeNode root) {
  3. List<Integer> list = new ArrayList<Integer>();
  4. TreeNode p = root;
  5. Stack<TreeNode> stack = new Stack<>();
  6. while(p != null || !stack.empty()) {
  7. while(p != null) {
  8. stack.push(p); list.add(p.val);
  9. p = p.left;
  10. }
  11. p = stack.pop();
  12. p = p.right;
  13. }
  14. return list;
  15. }
  16. }

二叉树中序遍历

  1. class Solution {
  2. public List<Integer> inorderTraversal(TreeNode root) {
  3. Stack<TreeNode> stack = new Stack<>();
  4. TreeNode p = root;
  5. List<Integer> list = new ArrayList<Integer>();
  6. while(p != null || !stack.empty()) {
  7. while(p != null) {
  8. stack.push(p); p = p.left;
  9. }
  10. p = stack.pop(); list.add(p.val);
  11. p = p.right;
  12. }
  13. return list;
  14. }
  15. }

二叉树后序遍历

  1. class Solution {
  2. public List<Integer> postorderTraversal(TreeNode root) {
  3. ArrayList<Integer> list = new ArrayList<>();
  4. Stack<TreeNode> stack = new Stack<>();
  5. if(root != null) stack.push(root);
  6. while(!stack.empty()) {
  7. TreeNode value = stack.pop();
  8. list.add(value.val);
  9. if(value.left != null) stack.push(value.left);
  10. if(value.right != null) stack.push(value.right);
  11. }
  12. ArrayList<Integer> result = new ArrayList<>();
  13. for(int i = list.size()-1; i >= 0; i--) result.add(list.get(i));
  14. return result;
  15. }
  16. }

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读