先序遍历
递归实现
class Solution {
public List < Integer > preorderTraversal ( TreeNode root) {
List < Integer > res = new ArrayList < Integer > ( ) ;
preorder ( root, res) ;
return res;
}
public void preorder ( TreeNode root, List < Integer > res) {
if ( root == null ) {
return ;
}
res. add ( root. val) ;
preorder ( root. left, res) ;
preorder ( root. right, res) ;
}
}
迭代实现
public List < Integer > preorderTraversal ( TreeNode root) {
List < Integer > res = new LinkedList < Integer > ( ) ;
Stack < TreeNode > stack = new Stack < TreeNode > ( ) ;
if ( root == null ) {
return res;
}
stack. push ( root) ;
TreeNode tmpNode = null ;
while ( ! stack. empty ( ) ) {
tmpNode = stack. pop ( ) ;
res. add ( tmpNode. val) ;
if ( tmpNode. right != null ) {
stack. push ( tmpNode. right) ;
}
if ( tmpNode. left != null ) {
stack. push ( tmpNode. left) ;
}
}
return res;
}
中序遍历
递归实现
class Solution {
public List < Integer > inorderTraversal ( TreeNode root) {
List < Integer > res = new ArrayList < Integer > ( ) ;
inorder ( root, res) ;
return res;
}
public void inorder ( TreeNode root, List < Integer > res) {
if ( root == null ) {
return ;
}
inorder ( root. left, res) ;
res. add ( root. val) ;
inorder ( root. right, res) ;
}
}
迭代实现
public List < Integer > inorderTraversal ( TreeNode root) {
List < Integer > res = new LinkedList < Integer > ( ) ;
Stack < TreeNode > stack = new Stack < TreeNode > ( ) ;
if ( root == null ) {
return res;
}
while ( root != null || ! stack. empty ( ) ) {
while ( root != null ) {
stack. push ( root) ;
root = root. left;
}
root = stack. pop ( ) ;
res. add ( root. val) ;
root = root. right;
}
return res;
}
后序遍历
递归实现
class Solution {
public List < Integer > postorderTraversal ( TreeNode root) {
List < Integer > res = new ArrayList < Integer > ( ) ;
postorder ( root, res) ;
return res;
}
public void postorder ( TreeNode root, List < Integer > res) {
if ( root == null ) {
return ;
}
postorder ( root. left, res) ;
postorder ( root. right, res) ;
res. add ( root. val) ;
}
}
迭代实现
class Solution {
public List < Integer > postorderTraversal ( TreeNode root) {
List < Integer > res = new ArrayList < Integer > ( ) ;
if ( root == null ) {
return res;
}
Deque < TreeNode > stack = new LinkedList < TreeNode > ( ) ;
TreeNode prev = null ;
while ( root != null || ! stack. isEmpty ( ) ) {
while ( root != null ) {
stack. push ( root) ;
root = root. left;
}
root = stack. pop ( ) ;
if ( root. right == null || root. right == prev) {
res. add ( root. val) ;
prev = root;
root = null ;
} else {
stack. push ( root) ;
root = root. right;
}
}
return res;
}
}