zoukankan      html  css  js  c++  java
  • LeetCode——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?

    中文:二叉树的前序遍历(根-左-右)。

    能用非递归实现吗?

    递归:

    public class BinaryTreePreorderTraversal {
        public List<Integer> preorderTraversal(TreeNode root) {
        	List<Integer> list = new ArrayList<Integer>();
            if(root == null)
            	return list;
            list.add(root.val);
            list.addAll(preorderTraversal(root.left));
            list.addAll(preorderTraversal(root.right));
            return list;
        }
        // Definition for binary tree
         public class TreeNode {
             int val;
             TreeNode left;
             TreeNode right;
             TreeNode(int x) { val = x; }
         }
    }
    非递归:先把右节点的值压入栈中,再压入左的。弹出左的,弹出右的……。

        public List<Integer> preorderTraversal(TreeNode root){
        	List<Integer> list = new ArrayList<Integer>();
        	if(root == null)
        		return list;
        	Stack<TreeNode> stack = new Stack<TreeNode>();
        	stack.push(root);
        	while(!stack.isEmpty()){
        		TreeNode node = stack.pop();
        		list.add(node.val);  		
        		if(node.right != null)
        			stack.push(node.right);
        		if(node.left != null)
        			stack.push(node.left);
        	}
        	return list;
        }

  • 相关阅读:
    比较两个日期的大小(年月日)
    js闭包
    星星点点
    刮刮卡刮奖效果
    html图片自适应屏幕大小(手机)
    将博客搬至CSDN
    类的讲义
    Anaconda教程
    css基础
    javascript
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6704428.html
Copyright © 2011-2022 走看看