二叉樹的順序儲存
public class arraybintree
//以指定深度來建立二叉樹
public arraybintree(int deep)
//以指定深度,指定根節點建立二叉樹
public arraybintree(int deep , t data)
/*** 為指定節點新增子節點。
* @param index 需要新增子節點的父節點的索引
* @param data 新子節點的資料
* @param left 是否為左節點
*/public void add(int index , t data , boolean left)
if (2 * index + 1 >= arraysize)
//新增左子節點
if (left)
else
}//判斷二叉樹是否為空。
public boolean empty()
//返回根節點。
public t root()
//返回指定節點(非根節點)的父節點。
public t parent(int index)
//返回指定節點(非葉子)的左子節點。當左子節點不存在時返回null
public t left(int index)
return (t)datas[index * 2 + 1] ;
}//返回指定節點(非葉子)的右子節點。當右子節點不存在時返回null
public t right(int index)
return (t)datas[index * 2 + 2] ;
}//返回該二叉樹的深度。
public int deep(int index)
//返回指定節點的位置。
public int pos(t data)
}return -1;
}public string tostring()
public static void main(string args)
}二叉樹的鍊錶儲存
public class twolinkbintree
public treenode(object data)
public treenode(object data , treenode left
, treenode right)
}private treenode root;
//以預設的構造器來建立二叉樹
public twolinkbintree()
//以指定根元素來建立二叉樹
public twolinkbintree(e data)
/*** 為指定節點新增子節點。
* @param index 需要新增子節點的父節點的索引
* @param data 新子節點的資料
* @param isleft 是否為左節點
* @return 新增的節點
*/public treenode addnode(treenode parent , e data
, boolean isleft)
if (isleft && parent.left != null)
if (!isleft && parent.right != null)
treenode newnode = new treenode(data);
if (isleft)
else
return newnode;
}//判斷二叉樹是否為空。
public boolean empty()
//返回根節點。
public treenode root()
return root;
}//返回指定節點(非根節點)的父節點。
public e parent(treenode node)
//返回指定節點(非葉子)的左子節點。當左子節點不存在時返回null
public e leftchild(treenode parent)
return parent.left == null ? null : (e)parent.left.data;
}//返回指定節點(非葉子)的右子節點。當右子節點不存在時返回null
public e rightchild(treenode parent)
return parent.right == null ? null : (e)parent.right.data;
}//返回該二叉樹的深度。
public int deep()
//這是乙個遞迴方法:每棵子樹的深度為其所有子樹的最大深度 + 1
private int deep(treenode node)
//沒有子樹
if (node.left == null
&& node.right == null)
else
}public static void main(string args)
}二叉樹的三叉鍊錶儲存
public class threelinkbintree
public treenode(object data)
public treenode(object data , treenode left
, treenode right , treenode parent)
}private treenode root;
//以預設的構造器來建立二叉樹
public threelinkbintree()
//以指定根元素來建立二叉樹
public threelinkbintree(e data)
/*** 為指定節點新增子節點。
* @param index 需要新增子節點的父節點的索引
* @param data 新子節點的資料
* @param isleft 是否為左節點
* @return 新增的節點
*/public treenode addnode(treenode parent , e data
, boolean isleft)
if (isleft && parent.left != null)
if (!isleft && parent.right != null)
treenode newnode = new treenode(data);
if (isleft)
else
//讓新節點的parent引用到parent節點
newnode.parent = parent;
return newnode;
}//判斷二叉樹是否為空。
public boolean empty()
//返回根節點。
public treenode root()
return root;
}//返回指定節點(非根節點)的父節點。
public e parent(treenode node)
return (e)node.parent.data;
}//返回指定節點(非葉子)的左子節點。當左子節點不存在時返回null
public e leftchild(treenode parent)
return parent.left == null ? null : (e)parent.left.data;
}//返回指定節點(非葉子)的右子節點。當右子節點不存在時返回null
public e rightchild(treenode parent)
return parent.right == null ? null : (e)parent.right.data;
}//返回該二叉樹的深度。
public int deep()
//這是乙個遞迴方法:每棵子樹的深度為其所有子樹的最大深度 + 1
private int deep(treenode node)
//沒有子樹
if (node.left == null
&& node.right == null)
else
}public static void main(string args)
}
JAVA實現二叉樹
一 分析 乙個二叉樹節點有三個部分,乙個是指向左子樹的部分,乙個是指向右子樹的部分,另外乙個是資料部分。可以把這個節點抽象成乙個節點物件,給物件有兩個節點物件屬性和乙個資料屬性。如下圖 乙個二叉樹有只有乙個根節點,其餘的都是根節點的直接或間接子節點。所以可以把二叉樹抽象成乙個物件,該物件有乙個節點型...
二叉樹(Java實現)
1.二叉樹 陣列 查詢快,插入慢 鍊錶 查詢慢,插入快 而二叉樹結構既能快速查詢,也能快速新增 2.特點 乙個節點的左子節點的關鍵字值小於這個節點,右子節點的關鍵字值大於或等於這個父節點 3.原始碼實現 public class binarytree else if key current.id e...
二叉樹 Java實現
package struct inte ce tree 工廠類 class factory1 public static tree gettreeinstance class binarytreeimpl implements tree public node node leftchild,node...