Java实现Leetcode题(二叉树)

Leetcode144(前序遍历)

	//递归
    public static List<Integer> inorderTraversal(TreeNode root){
		List<Integer> list = new ArrayList<>();
		inorder(root,list);
		return list;
	}
	public static void inorder(TreeNode root,List<Integer> list) {
		if(root==null) {
			return;
		}
		list.add(root.val);
		inorder(root.left,list);
		inorder(root.right,list);
	}
    
    //迭代
    public static List<Integer> preorderTraversal(TreeNode root){
		List<Integer> list = new ArrayList<Integer>();
		Deque<TreeNode> de = new LinkedList<>();
		if(root==null) {
			return list;
		}
		de.addFirst(root);
		while(!de.isEmpty()) {
			TreeNode temp = de.peekFirst();
			de.pollFirst();
			list.add(temp.val);
			if(temp.right!=null) {
				de.addFirst(temp.right);
			}
			if(temp.left!=null) {
				de.addFirst(temp.left);
			}
		}
		return list;
	}

Leetcode145(后序遍历) 

//迭代法
public static List<Integer> postorderTraversal(TreeNode root){
		List<Integer> list = new ArrayList<>();
		Deque<TreeNode> de = new LinkedList<>();
		if(root==null) {
			return list;
		}
		de.addFirst(root);
		while(!de.isEmpty()) {
			TreeNode temp = de.peekFirst();
			de.pollFirst();
			list.add(temp.val);
			if(temp.left!=null) {
				de.addFirst(temp.left);
			}
			if(temp.right!=null) {
				de.addFirst(temp.right);
			}
		}
		Collections.reverse(list);
		return list;
	}

   //递归
    public static List<Integer> postorderTraversal(TreeNode root){
		List<Integer> list = new ArrayList<>();
		postorder(root,list);
		return list;
	}
	public static void postorder(TreeNode root,List<Integer> list) {
		postorder(root.left,list);
		postorder(root.right,list);
		list.add(root.val);
	}

Leetcode94(中序遍历)

//迭代
public static List<Integer> inorderTraversal(TreeNode root){
		List<Integer> list = new ArrayList<>();
		Deque<TreeNode> de = new LinkedList<>();
		if(root == null) {
			return list;
		}
		TreeNode cur = root;
		while(cur!=null||!de.isEmpty()) {
			if(cur!=null) {
				de.addFirst(cur);
				cur = cur.left;
			}else {
				cur = de.peekFirst();
				list.add(cur.val);
				de.pollFirst();
				cur = cur.right;
			}
		}
		return list;
	}
    //递归
    public static List<Integer> inorderTraveral(TreeNode root){
		List<Integer> list = new ArrayList<>();
		inorder(root,list);
		return list;	
	}
	
	public static void inorder(TreeNode root,List<Integer>list) {
		if(root==null) {
			return;
		}
		inorder(root.left,list);
		list.add(root.val);
		inorder(root.right,list);
	}
    

Leetcode102(层序遍历) 

 public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new LinkedList<>();
        Deque<TreeNode> de = new LinkedList<>();
        if(root == null){
            return result;
        }
        de.add(root);
        while(!de.isEmpty()){
            int size = de.size();
            List<Integer> list = new LinkedList<>();
            while(size-->0){
                TreeNode temp =  de.pollFirst();
                list.add(temp.val);
                if(temp.left!=null){
                    de.addLast(temp.left);
                }
                if(temp.right!=null){
                    de.addLast(temp.right);
                }
            }
            result.add(list);
        }
        return result;
    }

Leetcode107(层序遍历II)

public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<List<Integer>> result = new LinkedList<>();
        Deque<TreeNode> de = new LinkedList<>();
        if(root == null){
            return result;
        }
        de.add(root);
        while(!de.isEmpty()){
            int size = de.size();
            List<Integer> list = new LinkedList<>();
            while(size-->0){
                TreeNode temp =  de.pollFirst();
                list.add(temp.val);
                if(temp.left!=null){
                    de.addLast(temp.left);
                }
                if(temp.right!=null){
                    de.addLast(temp.right);
                }
            }
            result.add(list);
        }
       Collections.reverse(result);
       return result;
    }

Leetcode199(二叉树的右视图) 

public class LeetCode199 {
	 public List<Integer> rightSideView(TreeNode root) {
		 List<Integer> list = new LinkedList<>();
		 Deque<TreeNode> de = new LinkedList<>();
		 if(root==null) {
			 return list;
		 }
		 de.add(root);
		 while(!de.isEmpty()) {
			 int size = de.size();
			 while(size-->0) {
				 TreeNode temp = de.pollFirst();
				 if(size==0) {
					 list.add(temp.val);
				 }
				 if(temp.left!=null){
	                    de.addLast(temp.left);
	                }
	                if(temp.right!=null){
	                    de.addLast(temp.right);
	                }
			 }
			 
		 }
		 return list;
	 }
}

LeetCode637(二叉树的层平均值)

public class LeetCode637 {
	public List<Double> averageOfLevels(TreeNode root) {
		List<Double> result = new LinkedList<>();
		Deque<TreeNode> de = new LinkedList<>();
		if(root==null) {
			return result;
		}
		de.add(root);
		while(!de.isEmpty()) {
			int size = de.size();
			int num = size;
			double sum = 0;
			while(size-->0) {
				TreeNode temp = de.peekFirst();
				de.pollFirst();
				sum+=temp.val;
				if(temp.left!=null) {
					de.addLast(temp.left);
				}
				if(temp.right!=null) {
					de.addLast(temp.right);
				}
			}
			double total = sum/num;
			result.add(total);
		}
		return result;
    }
}

 LeetCode429(N叉树的层序遍历)

package tree;

import java.util.Deque;
import java.util.LinkedList;
import java.util.List;

public class LeetCode429 {
	public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> result = new LinkedList<>();
        Deque<Node> de = new LinkedList<>();
        if(root == null) {
        	return result;
        }
        de.add(root);
        while(!de.isEmpty()) {
        	int size = de.size();
        	List<Integer> list = new LinkedList<>();
        	while(size-->0) {
        		Node temp = de.pollFirst();
        		list.add(temp.val);
        		if(temp.children!=null) {
        			for(int i = 0;i<temp.children.size();i++) {
        				de.addLast(temp.children.get(i));
        			}
        		}
        	}
        	result.add(list);
        }
        return result;
        
        
    }
}
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};

LeetCode515(在每个树行中找最大值)

public class LeetCode515 {
	 public List<Integer> largestValues(TreeNode root) {
        List<Integer> result = new LinkedList<>();
        Deque<TreeNode> de = new LinkedList<>();
        if(root==null) {
        	return result;
        }
        de.add(root);
        while(!de.isEmpty()) {
        	int size = de.size();
        	int max = Integer.MIN_VALUE;
        	while(size-->0) {
        		TreeNode temp = de.pollFirst();
        		max = temp.val>max?temp.val:max;
        		if(temp.left!=null) {
        			de.addLast(temp.left);
        		}
        		if(temp.right!=null) {
        			de.addLast(temp.right);
        		}
        	}
        	result.add(max);
        }
        return result;
   }
}

LeetCode116(填充每个节点的下一个右节点)

package tree;

import java.util.Deque;
import java.util.LinkedList;
import java.util.List;

public class LeetCode116 {
	 public Node_116 connect(Node_116 root) {
        Deque<Node_116> de = new LinkedList<>();
        if(root==null){
            return root;
        }
        de.add(root);
        while(!de.isEmpty()) {
        	int size = de.size();
        	while(size-->0) {
        		Node_116 temp = de.pollFirst();
        		if(size!=0) {
        			temp.next = de.peekFirst();
        		}
        		if(temp.left!=null) {
        			de.addLast(temp.left);
        		}
        		if(temp.right!=null) {
        			de.addLast(temp.right);
        		}
        	}
        }
        return root;
      
 }
}
class Node_116 {
    public int val;
    public Node_116 left;
    public Node_116 right;
    public Node_116 next;

    public Node_116() {}
    
    public Node_116(int _val) {
        val = _val;
    }

    public Node_116(int _val, Node_116 _left, Node_116 _right, Node_116 _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};

 LeetCode117(填充每个节点的下一个右节点II)同上


LeetCode104(二叉树的最大深度)

package tree;

import java.util.Deque;
import java.util.LinkedList;

public class LeetCode104 {
	public int maxDepth(TreeNode root) {
		Deque<TreeNode> de = new LinkedList<>();
		int len = 0;
		if(root==null) {
			return 0;
		}
		de.add(root);
		while(!de.isEmpty()) {
			int size = de.size();
			len++;
			while(size-->0) {
				TreeNode temp = de.pollFirst();
				if(temp.left!=null) {
					de.addLast(temp.left);
				}
				if(temp.right!=null) {
					de.addLast(temp.right);
				}
			}
		}
		return len;
    }
}
//递归
class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        } else {
            int leftHeight = maxDepth(root.left);
            int rightHeight = maxDepth(root.right);
            return Math.max(leftHeight, rightHeight) + 1;
        }
    }
}

LeetCode111(二叉树的最小深度) 

class Solution {
    public int minDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        if(root.left==null&&root.right==null){
            return 1;
        }
        int min_Depth = Integer.MAX_VALUE;
        if(root.left!=null){
            min_Depth = Math.min(minDepth(root.left),min_Depth);
        }
         if(root.right!=null){
            min_Depth = Math.min(minDepth(root.right),min_Depth);
        }
        return min_Depth+1;

    }
}


 


 

 

 

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值