Binary Tree: 0到2个子节点;
Binary Search Tree: 所有左边的子节点 < node自身 < 所有右边的子节点;
1. Full类型: 除最下面一层外, 每一层都有两个子节点;
2. Complete类型: 除最下面一层外为Full类型, 但是最下面一层最所有子节点靠左;
3. Balanced类型: 左右两个子树的长度相差小于等于一;
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: True if this Binary tree is Balanced, or false. */ int checkHeight(TreeNode root){ if(root == null) return -1; int leftHeight = checkHeight(root.left); if(leftHeight == Integer.MIN_VALUE) return Integer.MIN_VALUE; int rightHeight = checkHeight(root.right); if(rightHeight == Integer.MIN_VALUE) return Integer.MIN_VALUE; int heightDiff = leftHeight - rightHeight; if(Math.abs(heightDiff) > 1){ return Integer.MIN_VALUE; }else{ return Math.max(leftHeight, rightHeight) + 1; } } public boolean isBalanced(TreeNode root) { return checkHeight(root) != Integer.MIN_VALUE; // write your code here } }
traverse: 遍历; recursion: 递归(反复用自身); iteration: 迭代(循环);
3种遍历:
1. inorder: 左, node自身, 右(最左下角的node为第一个, 最右下角的node为最后一个);
2. preorder: node自身, 左, 右(node自身为第一个, 最右下角的node为最后一个);
3. postorder: 左, 右, node自身(最左下角的node为第一个, node自身为最后一个);
class Node { int val; Node left; Node right; public Node(int v) { this.val = v; } } public class BST { public static void inorder(Node node) { // 1. return condition if(node == null) return; // 2. process inorder(node.left); System.out.println(node.val); inorder(node.right); } public static void preorder(Node node) { if(node == null) return; System.out.println(node.val); preorder(node.left); preorder(node.right); } public static void postorder(Node node) { if(node == null) return; postorder(node.left); postorder(node.right); System.out.println(node.val); } public static void main(String[] args) { // TODO Auto-generated method stub Node root = buildTree(); inorder(root); } public static Node buildTree() { Node ten = new Node(10); Node one = new Node(1); Node fifteen = new Node(15); Node five = new Node(5); five.left = one; ten.left = five; ten.right = fifteen; return ten; } }
浙公网安备 33010602011771号