0% found this document useful (0 votes)
45 views

Data Structures in Java: Session 7 Instructor: Bert Huang

This document summarizes a lecture on data structures in Java that discusses lists, stacks, queues, trees, and tree traversals. It provides announcements on homework assignments and solutions. It reviews scope and stack applications/implementations. The main topics are lists, stacks, and queues in Linux and an introduction to trees, including definitions, tree terminology, tree implementations, and tree traversal algorithms like preorder, inorder, and postorder. Binary trees and their properties/implementations are also discussed.

Uploaded by

scribdeer
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views

Data Structures in Java: Session 7 Instructor: Bert Huang

This document summarizes a lecture on data structures in Java that discusses lists, stacks, queues, trees, and tree traversals. It provides announcements on homework assignments and solutions. It reviews scope and stack applications/implementations. The main topics are lists, stacks, and queues in Linux and an introduction to trees, including definitions, tree terminology, tree implementations, and tree traversal algorithms like preorder, inorder, and postorder. Binary trees and their properties/implementations are also discussed.

Uploaded by

scribdeer
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

Data Structures in

Java
Session 7
Instructor: Bert Huang
http://www1.cs.columbia.edu/~bert/courses/3134
Announcements

Homework 2 released on website


Due Oct. 6 at 5:40 PM (7 days)
th

Homework 1 solutions posted


Post homework to
Shared Files, Homework #2
Review

Review of scope
Stack applications examples
Stack implementation (easy)
Queue ADT definition and
implementation
Todays Plan

Lists, Stacks, Queues in Linux


Introduction to Trees
Definitions
Tree Traversal Algorithms
Binary Trees
Lists, Stacks, Queues
in Linux
Linux:
processes stored in Linked List
FIFO scheduler schedules jobs using queue
function calls push memory onto stack
Drawbacks of Lists
So far, the ADTs weve examined have been
linear

O(N) for simple operations


Can we do better?
Recall binary search: log N for find :-)

But list must be sorted. N log N to sort :-(


Trees

Extension of Linked List structure:


Each node connects to multiple nodes
Example usages include file systems,
Java class hierarchies

Fast searchable collections


Tree Terminology
Just like Linked Lists, Trees are
collections of nodes

Conceptualize trees upside down (like


family trees)

the top node is the root

nodes are connected by edges

edges define parent and child nodes

nodes with no children are called leaves


More Tree
Terminology
Nodes that share the
same parent are siblings

A path is a sequence of
nodes such that the next
node in the sequence is a
child of the previous
More Tree
Terminology
a nodes depth is the
length of the path from
root

the height of a tree is


the maximum depth

if a path exists between


two nodes, one is an
ancestor and the other
is a descendant
Tree Implementation

Many possible implementations


One approach: each node stores a list of
children
public class TreeNode<T> {
T Data;
Collection<TreeNode<T>> myChildren;
}
Tree Traversals

Suppose we want to print all nodes in a tree


What order should we visit the nodes?
Preorder - read the parent before its children
Postorder - read the parent after its children
Preorder vs.
Postorder
// parent before children // parent after children
preorder(node x) postorder(node x)
print(x) for child : myChildren
for child : myChildren postorder(child)
preorder(child) print(x)
Binary Trees
Nodes can only have two children:
left child and right child
Simplifies implementation and logic
public class BinaryNode<T> {
T element;
BinaryNode<T> left;
BinaryNode<T> right;
}

Provides new inorder traversal


Inorder Traversal

Read left child, then parent, then right child


Essentially scans whole tree from left to right
inorder(node x)
inorder(x.left)
print(x)
inorder(x.right)
Binary Tree
Properties
A binary tree is full if each node has
2 or 0 children

A binary tree is perfect if it is full and


each leaf is at the same depth

That depth is O(log N)


Expression Trees
Expression Trees are yet another way to
store mathematical expressions /
* 300
((x + y) * z)/300 + z
Note that the main mathematical x y
operators have 2 operands each

Inorder traversal reads back infix notation


Postorder traversal reads postfix notation
Decision Trees
It is often useful to design decision
trees

Left/right child represents yes/no


answers to questions
Hungry?

Do nothing Enough money?

Chicken and Rice Subsconscious


Reading

This class: Weiss 4.1-4.2


Next class: Weiss 4.3

You might also like