Binary Tree Inorder Traversal

来源:互联网 发布:维普数据库论文查询 编辑:程序博客网 时间:2024/04/24 22:08

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?

思路:需要借助于栈,由于是中序遍历二叉树,从根节点的左边开始遍历二叉树,不断将结点加入栈,直到遍历到最左边的结点,弹出该结点,

  1. 如果该结点有右结点,再把该右结点作为子树根节点,也是从该子树根结点的左边开始遍历 ,直到遍历到最左边;
  2. 如果弹出的结点没有右结点,那么继续弹出结点,直到弹出的结点存在右结点,每弹出一个结点就加入到结果集中,直到栈为空。返回结果集即可。
/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<Integer> inorderTraversal(TreeNode root) {        List<Integer> result=new ArrayList<Integer>();        if(root==null) return result;        Stack<TreeNode> stack=new Stack<TreeNode>();        TreeNode p=root;        while(!stack.empty()||p!=null)          { if(p!=null)            {  stack.push(p);              p=p.left;           }          else {              TreeNode node=stack.pop();              result.add(node.val);                 p=node.right;          }        }        return result;    }}
0 0
原创粉丝点击