代码随想录 Day14 - 二叉树(一)

简介: 代码随想录 Day14 - 二叉树(一)

相关概念


满二叉树


一棵深度为 k 且有 个结点的二叉树称为满二叉树。

节点数 = 2^k - 1


完全二叉树


除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。

每一层从左到右都不缺失节点,完全二叉树一定是满二叉树。


二叉搜索树


二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。


平衡二叉搜索树


平衡二叉搜索树(英语:Balanced Binary Tree)是一种结构平衡的二叉搜索树,即叶节点高度差的绝对值不超过 1,并且左右两个子树都是一棵平衡二叉树。


作业题


递归法遍历二叉树


144. 二叉树的前序遍历

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        dfs(root, result);
        return result;
    }
    private void dfs(TreeNode node, List<Integer> result) {
        if (node == null) {
            return;
        }
         result.add(node.val);
        dfs(node.left, result);
        dfs(node.right, result);
    }
}


94. 二叉树的中序遍历

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
 public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        dfs(root, result);
        return result;
    }
    private void dfs(TreeNode node, List<Integer> result) {
        if (node == null) {
            return;
        }
        dfs(node.left, result);
        result.add(node.val);
        dfs(node.right, result);
    }
}


145. 二叉树的后序遍历

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
  public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        dfs(root, result);
        return result;
    }
    private void dfs(TreeNode node, List<Integer> result) {
        if (node == null) {
            return;
        }
        dfs(node.left, result);
        dfs(node.right, result);
        result.add(node.val);
    }
}


迭代法遍历二叉树


后续再补充。。。

144. 二叉树的前序遍历


94. 二叉树的中序遍历


145. 二叉树的后序遍历


目录
相关文章
|
2月前
代码随想录——双指针(一)
代码随想录——双指针(一)
代码随想录 Day21 - 二叉树(七)
代码随想录 Day21 - 二叉树(七)
29 0
|
3月前
|
算法
代码随想录Day34 LeetCode T343整数拆分 T96 不同的二叉搜索树
代码随想录Day34 LeetCode T343整数拆分 T96 不同的二叉搜索树
43 0
代码随想录 Day17 - 二叉树(四)
代码随想录 Day17 - 二叉树(四)
30 1
代码随想录 Day18 - 二叉树(五)
代码随想录 Day18 - 二叉树(五)
44 0
代码随想录 Day22 - 二叉树(八)
代码随想录 Day22 - 二叉树(八)
38 0
代码随想录 Day16 - 二叉树(三)
代码随想录 Day16 - 二叉树(三)
35 0
代码随想录 Day15 - 二叉树(二)
代码随想录 Day15 - 二叉树(二)
31 0
代码随想录 Day20 - 二叉树(六)
代码随想录 Day20 - 二叉树(六)
40 0
代码随想录 Day23 - 二叉树(九)
代码随想录 Day23 - 二叉树(九)
39 0