二叉树1
leetcode 二叉树
树的遍历
前序遍历
前序遍历首先访问根节点,然后遍历左子树,最后遍历右子树。
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> nodeList = new ArrayList<>();
traversal(root, nodeList);
return nodeList;
}
public void traversal(TreeNode root, List<Integer> nodeList){
if(root == null){
return;}
//前序遍历
nodeList.add(root.val);
traversal(root.left, nodeList);
traversal(root.right, nodeList);
}
}
中序遍历
中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> nodeList = new ArrayList<>();
traversal(root, nodeList);
return nodeList;
}
public void traversal(TreeNode root, List<Integer> nodeList){
if(root == null){
return;}
//中序遍历
traversal(root.left, nodeList);
nodeList.add(root.val);
traversal(root.right, nodeList);
}
}
后序遍历
后序遍历是先遍历左子树,然后遍历右子树,最后访问树的根节点。
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> nodeList = new ArrayList<>();
traversal(root, nodeList);
return nodeList;
}
public void traversal(TreeNode root, List<Integer> nodeList){
if(root == null){
return;}
//后序遍历
traversal(root.left, nodeList);
traversal(root.right, nodeList);
nodeList.add(root.val);
}
}
层序遍历
层序遍历就是逐层遍历树结构。
广度优先搜索是一种广泛运用在树或图这类数据结构中,遍历或搜索的算法。 该算法从一个根节点开始,首先访问节点本身。 然后遍历它的相邻节点,其次遍历它的二级邻节点、三级邻节点,以此类推。
当我们在树中进行广度优先搜索时,我们访问的节点的顺序是按照层序遍历顺序的。
通常,我们使用一个叫做队列的数据结构来帮助我们做广度优先搜索。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
if(root != null){
queue.add(root);
}
while(!queue.isEmpty()){
int n = queue.size