1.树的前序遍历(leetcode144)
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
//非递归
public List<Integer> preorderTraversal(TreeNode root) {
List list=new ArrayList<>();
Stack<TreeNode> stack=new Stack<>();
if(root==null){
return list;
}
stack.push(root);
while(!stack.empty()){
TreeNode p = stack.pop();
list.add(p.val);
if(p.right!=null){
stack.push(p.right);
}
if(p.left!=null){
stack.push(p.left);
}
}
return list;
}
//递归
List list=new ArrayList();
public List<Integer> preorderTraversal(TreeNode root) {
if(root!=null){
list.add(root.val);
preorderTraversal(root.left);
preorderTraversal(root.right);
}
return list;
}
}
2.树的中序遍历(leetcode94)
//非递归
public List<Integer> inorderTraversal(TreeNode root) {
List list=new ArrayList<>();
Stack<TreeNode> stack=new Stack<>();
while(root!=null||!stack.empty()){
if(root!=null){
stack.push(root);
root=root.left;
}else{
root=stack.pop();
list.add(root.val);
root=root.right;
}
}
return list;
}
//递归
List list=new ArrayList();
public List<Integer> preorderTraversal(TreeNode root) {
if(root!=null){
preorderTraversal(root.left);
list.add(root.val);
preorderTraversal(root.right);
}
return list;
}
3.树的后序遍历(leetcode145)
//非递归
//取巧的方法。该写法的访问顺序并不是后序遍历,
//而是利用先序遍历“根左右”的遍历顺序,
//将先序遍历顺序更改为“根右左”,
//反转结果List,得到结果顺序为“左右根”。
public List<Integer> postorderTraversal(TreeNode root) {
List list=new ArrayList<>();
Stack<TreeNode> stack=new Stack<>();
if(root==null){
return list;
}
stack.push(root);
while(!stack.empty()){
TreeNode p = stack.pop();
if(p.left!=null){
stack.push(p.left);
}
if(p.right!=null){
stack.push(p.right);
}
list.add(0,p.val);
}
return list;
}
//递归
List list=new ArrayList();
public List<Integer> preorderTraversal(TreeNode root) {
if(root!=null){
preorderTraversal(root.left);
preorderTraversal(root.right);
list.add(root.val);
}
return list;
}
4.层序遍历(leetcode102)
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list=new ArrayList<>();
if(root==null){
return list;
}
Queue<TreeNode> q=new LinkedList<>();
q.add(root);
while(!q.isEmpty()){
List<Integer> ll=new ArrayList<>();
int count=q.size();
while(count>0) {
TreeNode node = q.poll();
ll.add(node.val);
if (node.left != null) {
q.add(node.left);
}
if (node.right != null) {
q.add(node.right);
}
count--;
}
list.add(ll);
}
return list;
}