Skip to content

Instantly share code, notes, and snippets.

@JakubOboza
Created April 1, 2012 00:11
Show Gist options
  • Save JakubOboza/2269915 to your computer and use it in GitHub Desktop.
Save JakubOboza/2269915 to your computer and use it in GitHub Desktop.
bst tree
-module(bst_tree).
-compile(export_all).
-record(node, {key, val, left = nil, right = nil}).
lookup(Node, Key) when Key =:= Node#node.key ->
{ok, Node#node.val};
lookup(Node, Key) when Key < Node#node.key ->
lookup(Node#node.left, Key);
lookup(Node, Key) when Key > Node#node.key ->
lookup(Node#node.right, Key);
lookup(nil, _) ->
notfound.
insert(nil, Key, Val) ->
#node{key = Key, val = Val};
insert(Node, Key, Val) when Key =:= Node#node.key ->
Node#node{val = Val};
insert(Node, Key, Val) when Key < Node#node.key ->
Node#node{ left = insert(Node#node.left, Key, Val) };
insert(Node, Key, Val) ->
Node#node{ right = insert(Node#node.right, Key, Val) }.
56> R = bst_tree:insert(nil, "kuba", "oboza").
{node,"kuba","oboza",nil,nil}
57> RR = bst_tree:insert(R, "dan", "palmer").
{node,"kuba","oboza",{node,"dan","palmer",nil,nil},nil}
58> RRR = bst_tree:insert(RR, "jono", "langley").
{node,"kuba","oboza",
{node,"dan","palmer",nil,{node,"jono","langley",nil,nil}},
nil}
59> RRRR = bst_tree:insert(RRR, "varun", "dev").
{node,"kuba","oboza",
{node,"dan","palmer",nil,{node,"jono","langley",nil,nil}},
{node,"varun","dev",nil,nil}}
60> RRRRR = bst_tree:insert(RRRR, "emma", "james").
{node,"kuba","oboza",
{node,"dan","palmer",nil,
{node,"jono","langley",{node,"emma","james",nil,nil},nil}},
{node,"varun","dev",nil,nil}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment