1. 二叉树的先序遍历
代码如下:
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<>();
if (root==null) return list;
Stack<TreeNode> s =new Stack<>();
s.push(root);
while(!s.empty())
{
TreeNode temp=s.peek();
list.add(temp.val);
s.pop();
if(temp.right!=null) s.push(temp.right);
if(temp.left!=null) s.push(temp.left);
}
return list;
}
2. 二叉树的中序遍历
代码如下:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<>();
if(root==null) return list;
Stack<TreeNode> s=new Stack<>();
TreeNode p=root;
while(p!=null || !s.empty())
{
if(p!=null)
{
s.push(p);
p=p.left;
}
else
{
p=s.peek();
s.pop();
list.add(p.val);
p=p.right;
}
}
return list;
}
3. 二叉树的后序遍历
代码如下:
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList<>();
if(root==null) return list;
Stack<TreeNode> s=new Stack<>();
TreeNode p=root;
TreeNode pre=null;
while(p!=null || !s.empty())
{
while(p!=null)
{
s.push(p);
p=p.left;
}
if(!s.empty())
{
p=s.peek();
if(pre==p.right || p.right==null)
{
s.pop();
list.add(p.val);
pre=p;
p=null;
}
else p=p.right;
}
}
return list;
}