zoukankan      html  css  js  c++  java
  • 二叉树遍历思想(一) : 前序遍历

      二叉树递归定义 : 

      1) 空节点(null)为二叉树

      2)二叉树的左子树为二叉树,二叉树的右子树为二叉树。

      二叉树的前序遍历递归定义 : 

      1) 当前节点为空(null)直接返回

      2) 对于非空节点

        i)   操作当前节点

        ii)  前序遍历左子树

        iii) 前序遍历右子树

      二叉树的非递归遍历方法 : 

        使用栈来进行遍历。

        策略简述 : 

          利用栈和循环,每次循环的输入变量node都必须为当前要遍历的树的根节点。也就是将循环当作递归函数使用。

          例如当前输入node = root,那么对于当前层面来说,下一次 node = root.left。当左子树前序遍历结束后,必定要是 node = root.right。

          那么如何实现上述例子呢?

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

      代码解释 :

        第五行是边界条件 : 什么时候结束遍历? 当当前节点为空节点且栈也为null时。

        循环的输入参数 : root, stack。

        什么时候左子树遍历完毕,要遍历上一层的树根节点的右子树? 当当前节点指针为空的时候。也就意味着左子树遍历完毕了。

           

  • 相关阅读:
    MongoDB学习:(一)MongoDB安装
    事件轮询 Event Loop
    常见的HTML5语义化标签
    前端动画性能优化方案
    前端动画的实现
    《SVN的操作流程及规范》
    css、js文件后的后缀作用是什么?
    实现单行文字溢出显示...,以及多行文字溢出显示...
    从输入URL到页面返回的过程详解
    jQuery实现点击复制效果
  • 原文地址:https://www.cnblogs.com/vizdl/p/12287618.html
Copyright © 2011-2022 走看看