1.递归与栈
class Program
{
public static int Func(int n)
{
if (n == 1)
return 1;
else
return n * Func(n - 1);
}
static void Main(string[] args)
{
Console.WriteLine(Func(1));
Console.WriteLine(Func(2));
Console.WriteLine(Func(3));
Console.WriteLine(Func(4));
Console.Read();
}
}
2.什么是二叉查找树
基础框架:
class BST1<E> where E : IComparable<E>
{
private class Node
{
public E e;
public Node lift;
public Node right;
public Node(E e)
{
this.e = e;
lift = null;
right = null;
}
}
private Node root;
private int N;
public BST1()
{
root = null;
N = 0;
}
public int Count { get { return N; } }
public bool IsEmpty { get { return N == 0; } }
}
3.非递归添加
public void Add(E e)
{
if (root == null)
{
root = new Node(e);
N++;
return;
}
Node pre = null;
Node cur = root;
while (cur != null)
{
if (e.CompareTo(cur.e) == 0)
return;
pre = cur;
if (e.CompareTo(cur.e) < 0)
cur = cur.left;
else
cur = cur.right;
}
cur = new Node(e);
if (e.CompareTo(pre.e) < 0)
pre.left = cur;
else
pre.right = cur;
N++;
}
4.递归添加
public void Add(E e)
{
root = Add(root, e);
}
//以node为根的树中添加元素e,添加后返回根节点node
private Node Add(Node node, E e)
{
if (node == null)
{
N++;
return new Node(e);
}
if (e.CompareTo(node.e) < 0)
node.left = Add(node.left, e);
else if (e.CompareTo(node.e) > 0)
node.right = Add(node.right, e);
return node;
}
5.递归过程分析
6.包含
public bool Contains(E e)
{
return Contains(root, e);
}
//以node为根的树是否包含元素e
private bool Contains(Node node,E e)
{
if (node == null)
return false;
if (e.CompareTo(node.e) == 0)
return true;
else if (e.CompareTo(node.e) < 0)
return Contains(node.left, e);
else
return Contains(node.right, e);
}