3.7.1. Binární strom

V praxi se často setkáváme s binárními stromy, jejichž uzly mají nejvýše dva následníky. Tento typ stromu se používá například pro vyhledávání, reprezentaci zanořených seznamových struktur nebo jako vnitřní struktura pro rozhodovací systémy.

Obrázek 3.10. Binární strom

V jazyce Java můžeme uzly binárního stromu reprezentovat objekty, které nesou nějakou datovou složku (např. typu Object, což nám umožní do stromu ukládat libovolné objekty) a referenci na levého a pravého následníka uzlu. Pokud některý následník chybí, bude příslušná reference nastavena na hodnotu null.

class TreeNode { 
  public TreeNode(Object data) { _data = data; } 
 
  public TreeNode getLeft() { return _left; } 
  public TreeNode getRight() { return _right; } 
  public Object getData() { return _data; } 
 
  public void setLeft(TreeNode node) { _left = node; } 
  public void setRight(TreeNode node) { _right = node; } 
  public void setData(Object data) { _data = data; } 
 
  private Object   _data; 
  private TreeNode _left; 
  private TreeNode _right; 
}

Takto reprezentovaný uzel stromu se vytváří jako list nesoucí zadanou hodnotu a teprve voláním metod setLeft() a setRight() pro nastavení reference na levý a pravý podstrom se z něj stává vnitřní uzel stromu.

Příklad 3.13.
Vytvořte strom obsahující uzly s řetězcovými hodnotami "a", "b", "c", kde uzel "a" je kořenem a další dva uzly jeho levým a pravým následníkem.

Nejprve vytvoříme samostatné uzly a v dalším kroku mezi nimi ustavíme vazby:

TreeNode a = new TreeNode("a"); 
TreeNode b = new TreeNode("b"); 
TreeNode c = new TreeNode("c"); 
a.setLeft(b); 
a.setRight(c);

Výsledný strom je reprezentován proměnnou a, odkazující na kořen stromu.