學習java 二叉樹的鏈式實現以及三種遍歷方式

2021-08-10 07:14:46 字數 1777 閱讀 9687

//二叉樹的鍊錶結構

public class bintree

public treenode(object data)

} // 定義根結點

private treenode root;

public bintree()

public bintree(t data)

// 新增結點 (isleft是否新增在parent的左結點)

public treenode addnode(treenode parent, t data, boolean isleft) else if (isleft && (parent.lchild != null)) else if ((!isleft) && (parent.rchild != null))

treenode node = new treenode(data);

if (isleft) else

return node;

} // 返回雙親結點

public treenode parent(treenode node)

public treenode parent(treenode subtree, treenode node)

// 如果subtree的左或者右孩子是node,則返回subtree

if (subtree.lchild == node || subtree.rchild == node)

// 如果不是,這依次遍歷其左右子樹,最終找到其雙親結點

treenode p;

if ((p = parent(subtree.lchild, node)) != null) else

} // 判斷二叉樹是否為空

public boolean isempty() else

} // 獲取根結點

public treenode getroot() else

} // 獲取結點的左子樹

public treenode getleft(treenode parent) else

} // 獲取結點的右子樹

public treenode getright(treenode parent) else

} private int getdeep(treenode node) else else

} }// 求樹的深度

public int gettreedeep()

// 獲取結點的個數

public int size()

private int size(treenode node) else

} private void visit(treenode node)

// 遍歷結點(前序遍歷)

public void preorder(treenode node)

} // 遍歷結點(中序遍歷)

public void inorder(treenode node)

} // 遍歷結點(後序遍歷)

public void postorder(treenode node)

}}

測試類

import mytree.bintree.treenode;

/* * 二叉樹

* a

* b c

* d e f

* */

public class bintreetest

}

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...