Java實現二叉樹

2021-08-27 13:44:11 字數 2492 閱讀 1326

在電腦科學中,二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。

一棵深度為k,且有2^k-1個節點的二叉樹,稱為滿二叉樹。這種樹的特點是每一層上的節點數都是最大節點數。而在一棵二叉樹中,除最後一層外,若其餘層都是滿的,並且最後一層或者是滿的,或者是在右邊缺少連續若干節點,則此二叉樹為完全二叉樹。具有n個節點的完全二叉樹的深度為floor(log2n)+1。深度為k的完全二叉樹,至少有2k-1個節點,至多有2k-1個節點

節點類

public class node 

public void display()

}

二叉樹類

public class binarytree  else 

} else if (val > current.value)

} else

}} }

// 查詢

public node find(int key) else if (key > current.value)

if (current == null)

} return current;

} //中序遍歷

//*****************遞迴遍歷

public void inordertarverse()

private void inordertarverse(node node)

//****************非遞迴遍歷

public void inorderbystack()

if (!stack.isempty())

} system.out.println();

} //先序遍歷

//*************遞迴遍歷

public void perordertarverse()

private void perordertarverse(node node)

node.display();

perordertarverse(node.leftchild);

perordertarverse(node.rightchild);

} //*************非遞迴遍歷

public void preorderbystack()

if( ! stack.isempty() )

} }

//後序遍歷

//*******************遞迴遍歷

public void postordertanverse()

private void postordertanverse(node node)

postordertanverse(node.leftchild);

postordertanverse(node.rightchild);

node.display(); }

// 得到後繼節點,即刪除節點的左後代

private node getsuccessor(node delnode)

// 如果後繼節點不是刪除節點的右子節點時,

if (successor != delnode.rightchild)

// 任何情況下,都需要將刪除節點的左子節點指向後繼節點的左子節點

successor.leftchild = delnode.leftchild;

return successor;

} // 刪除

public boolean delete(int value) else if (value < current.value) else

// 找不到需要刪除的節點,直接返回

if (current == null)

return false;

} // 分情況考慮

// 1、需要刪除的節點為葉子節點

if (current.leftchild == null && current.rightchild == null) else else

}} // 2、需要刪除的節點有乙個子節點,且該子節點為左子節點

else if (current.rightchild == null) else else

}} // 2、需要刪除的節點有乙個子節點,且該子節點為右子節點

else if (current.leftchild == null) else else

}} // 3、需要刪除的節點有兩個子節點,需要尋找該節點的後續節點替代刪除節點

else else else

}} current = null;

return true;

}}

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