KotlinCS 124 LogoJava
PrevIndexNext
Kotlin
Java
  • Implementing a Map : 04/26/2024

  • Streams : 04/25/2024

  • Generics : 04/24/2024

  • Hashing : 04/23/2024

  • Binary Search : 04/22/2024

  • MP3: Course Ratings : 04/19/2024

  • Quicksort : 04/18/2024

  • Merge Sort : 04/17/2024

  • Sorting Algorithms : 04/16/2024

  • MP Debugging Part 1 : 04/15/2024

  • MP2: Course Activity : 04/12/2024

  • Practice with Recursion : 04/11/2024

  • MP Debugging Part 0 : 04/10/2024

  • MP2: API Client : 04/09/2024

  • MP2: API Server : 04/08/2024

  • Trees and Recursion : 04/05/2024

  • Trees : 04/04/2024

  • Recursion : 04/03/2024

  • MP1: Filtering and Search : 04/02/2024

  • MP1: Loading and Sorting : 04/01/2024

  • Lists Review and Performance : 03/29/2024

  • Linked Lists : 03/28/2024

  • Algorithms and Lists : 03/27/2024

  • Continuing MP0 : 03/26/2024

  • Getting Started with MP0 : 03/25/2024

  • Lambda Expressions : 03/22/2024

  • Anonymous Classes : 03/21/2024

  • Practice with Interfaces : 03/20/2024

  • Implementing Interfaces : 03/19/2024

  • Using Interfaces : 03/18/2024

  • Working with Exceptions : 03/08/2024

  • Throwing Exceptions : 03/07/2024

  • Catching Exceptions : 03/06/2024

  • References and Polymorphism : 03/05/2024

  • References : 03/04/2024

  • Data Modeling 2 : 03/01/2024

  • Equality and Object Copying : 02/29/2024

  • Polymorphism : 02/28/2024

  • Inheritance : 02/27/2024

  • Data Modeling 1 : 02/26/2024

  • Static : 02/23/2024

  • Encapsulation : 02/22/2024

  • Constructors : 02/21/2024

  • Objects, Continued : 02/20/2024

  • Introduction to Objects : 02/19/2024

  • Compilation and Type Inference : 02/16/2024

  • Practice with Collections : 02/15/2024

  • Maps and Sets : 02/14/2024

  • Lists and Type Parameters : 02/13/2024

  • Imports and Libraries : 02/12/2024

  • Multidimensional Arrays : 02/09/2024

  • Practice with Strings : 02/08/2024

  • null : 02/07/2024

  • Algorithms and Strings : 02/06/2024

  • Strings : 02/05/2024

  • Functions and Algorithms : 02/02/2024

  • Practice with Functions : 02/01/2024

  • More About Functions : 01/31/2024

  • Errors and Debugging : 01/30/2024

  • Functions : 01/29/2024

  • Practice with Loops and Algorithms : 01/26/2024

  • Algorithms : 01/25/2024

  • Loops : 01/24/2024

  • Arrays : 01/23/2024

  • Compound Conditionals : 01/22/2024

  • Conditional Expressions and Statements : 01/19/2024

  • Operations on Variables : 01/18/2024

  • Variables and Types : 01/17/2024

  • Welcome to CS 124 : 01/16/2024

Trees and Recursion

import cs125.trees.BinaryTree;
int countLeftGreaterThanRight(BinaryTree tree) {
return 0;
}
assert countLeftGreaterThanRight(new BinaryTree<Integer>(0, 1, 2)) == 1;

Next we’ll continue practicing with trees and recursion! And what better way to do that then to do a few problems together? So let’s get started!

Count Left Greater Than Right
Count Left Greater Than Right

As a warm up, let’s do another counting problem. Given a binary tree containing Integers, let’s count the number of nodes where the value of the left child is greater than the value of the right child.

Before we start, remember the core of our approach to recursion:

// Binary Tree Count Left Greater Than Right

Tree Search
Tree Search

Next, we’ll look at how to determine if a binary tree contains a certain value. This problem introduces a new wrinkle to our usual approach to recursion!

// Binary Tree Search

Practice: Binary Tree Count Equal to Child

Created By: Geoffrey Challen
/ Version: 2020.11.0

Create a public class BinaryTreeCounter that provides a single class method named countEqualToEitherChild that accepts a single BinaryTree and counts the number of nodes in the tree where the value at that node is equal to either the value at its right child or the value at its left child. Keep in mind that not every node has a right or left child, so you'll need to check for null carefully. (Or use try-catch!) However, you can assume that all of the values in the tree are non-null.

For reference, cs125.trees.BinaryTree has the following public properties:

Algorithm Analysis
Algorithm Analysis

Next, let’s examine the performance of our recursive algorithms, and determine what O(n) category they belong in.

// Binary Tree Algorithm Analysis

Homework: BinaryTree Count Equal Children

Created By: Geoffrey Challen
/ Version: 2021.10.0

Create a public class BinaryTreeCounter that provides a single class method named countEqualChildren that accepts a single BinaryTree<?> and counts the number of nodes in the tree that have two children with equal values. Keep in mind that not every node has a right or left child, so you'll need to check for null carefully. (Or use try-catch!) However, you can assume that all the values in the tree are non-null.

For reference, cs125.trees.BinaryTree has the following public properties:

More Practice

Need more practice? Head over to the practice page.