• 144. Binary Tree Preorder Traversal


    Given a binary tree, return the preorder traversal of its nodes' values.

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3
    

    return [1,2,3].

    Note: Recursive solution is trivial, could you do it iteratively?

    本题和Binary Tree Inorder Traversal有点类似,但是思路是有点不相同的,先说本题思路,也是创建一个stack,一个Treenode,但是stack用来存储所有的右节点,先把node的值存储到list里面,然后遍历到它的左节点,如果它的左节点为null并且stack有值,则让节点等于stack的pop值,代码如下:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public List<Integer> preorderTraversal(TreeNode root) {
    12         List<Integer> res=  new ArrayList<Integer>();
    13         Stack<TreeNode> stack = new Stack<TreeNode>();
    14         TreeNode node = root;
    15         while(node!=null){
    16             res.add(node.val);
    17             if(node.right!=null){
    18                 stack.push(node.right);
    19             }
    20             node = node.left;
    21             if(node==null&&!stack.isEmpty()){
    22                 node = stack.pop();
    23             }
    24         }
    25         return res;
    26     }
    27 }

    问题来了,那么它和中序遍历中有什么不同呢?首先,中序的循环里面还有一个while循环,这个while用来遍历到最左面的节点用的,而先序遍历是不用这么做的。其次,res的add情况不同,中序是遍历到最左面之后在add,而中序是每次循环开始的时候add的;第三,stack存储的值不同,中序里面存储的是中间节点(相对来说),而先序遍历里面存储的是右节点;

  • 相关阅读:
    网络爬虫基础练习
    综合练习:词频统计
    Hadoop综合大作业
    理解MapReduce
    熟悉常用的HBase操作
    第三章、熟悉常用的HDFS操作
    爬虫大作业
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6603170.html
Copyright © 2020-2023  润新知