LeetCode P144 Binary Tree Preorder Traversal

来源:互联网 发布:keras tensorflow 编辑:程序博客网 时间:2024/06/03 18:12

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?

题目大意:给定一个二叉树。返回它的前序遍历序列。要求使用迭代而不是递归

思路:使用LIFO的数据结构“栈”来模仿前序遍历的过程。前序遍历顺序为:->左孩子->右孩子。从栈中弹出节点,若以当前节点为根,则记录根节点的值,然后将它的左右孩子放入栈中以便后面读取。前序遍历先左后右,栈是先进后出,因此先将右孩子放入栈中,再把左孩子放入栈中。重复执行该操作直到栈为空。

Java代码:

import java.util.ArrayList;import java.util.List;import java.util.Stack;class TreeNode {    int val;    TreeNode left;    TreeNode right;    TreeNode(int x) { val = x; }} public class Solution {    public List<Integer> preorderTraversal(TreeNode root) {    //使用栈暂存还未确定顺序的节点    Stack<TreeNode> preorderStack = new Stack<TreeNode>();        List<Integer>preorderNum = new ArrayList<Integer>();        if (root == null) {return preorderNum;}        preorderStack.push(root);        TreeNode tmpNode;        while (!preorderStack.empty()) {        //弹出当前节点tmpNode = preorderStack.pop();preorderNum.add(tmpNode.val);//先放右孩子,再放左孩子if (tmpNode.right != null) {preorderStack.push(tmpNode.right);}if (tmpNode.left != null) {preorderStack.push(tmpNode.left);}}    return preorderNum;    }}


0 0
原创粉丝点击