【LeetCode】Binary Tree Inorder Traversal 二叉树中序遍历递归以及非递归算法

来源:互联网 发布:数学思维训练 知乎 编辑:程序博客网 时间:2024/04/29 01:49
Binary Tree Inorder Traversal 
Total Accepted: 16494 Total Submissions: 47494
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
   1    \     2    /   3
return[1,3,2].
Note: Recursive solution is trivial, could you do it iteratively?
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.
【解题思路】
1、递归

Java AC

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    private ArrayList<Integer> list;    public ArrayList<Integer> inorderTraversal(TreeNode root) {        list = new ArrayList<Integer>();        inOrder(root);        return list;    }    private void inOrder(TreeNode root){        if(root == null){            return;        }        inOrder(root.left);        list.add(root.val);        inOrder(root.right);    }}
2、非递归

栈存储节点,当左孩子不为空,一直入栈。否则出栈,同时将栈顶元素存入list中,针对当前节点右孩子做同样操作。

Java AC

/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    private ArrayList<Integer> list;    public ArrayList<Integer> inorderTraversal(TreeNode root) {        list = new ArrayList<Integer>();        inOrder(root);        return list;    }    private void inOrder(TreeNode root){        Stack<TreeNode> stack = new Stack<TreeNode>();        while(root != null || !stack.isEmpty()){            while(root != null){                stack.push(root);                root = root.left;            }            if(!stack.isEmpty()){                root = stack.pop();                list.add(root.val);                root = root.right;            }        }    }}


0 0
原创粉丝点击