java 數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)的實(shí)現(xiàn)代碼
1。 二叉樹(shù)接口
public interface BinaryTreeInterface<T> {
public T getRootData();
public int getHeight();
public int getNumberOfRoot();
public void clear();
public void setTree(T rootData); // 用rootData設(shè)置樹(shù)
public void setTree(T rootData,BinaryTreeInterface<T> left,BinaryTreeInterface<T> right); //設(shè)置樹(shù),用左右子節(jié)點(diǎn)
}
2 節(jié)點(diǎn)類
package com.jimmy.impl;
public class BinaryNode<T> {
private T data;
private BinaryNode<T> left; //左子節(jié)點(diǎn)
private BinaryNode<T> right; //右子節(jié)點(diǎn)
public BinaryNode(){
this(null);
}
public BinaryNode(T data){
this(data,null,null);
}
public BinaryNode(T data,BinaryNode<T> left,BinaryNode<T> right){
this.data=data;
this.left=left;
this.right=right;
}
public T getData()
{
return data;
}
public void setData(T data)
{
this.data= data;
}
public BinaryNode<T> getLeft() {
return left;
}
public void setLeft(BinaryNode<T> left) {
this.left = left;
}
public BinaryNode<T> getRight() {
return right;
}
public void setRight(BinaryNode<T> right) {
this.right = right;
}
public boolean hasLeft()
{return left!=null;
}
public boolean hasRight()
{return right!=null;
}
public boolean isLeaf()
{return (left==null)&&(right==null);
}
public int getHeight()
{
return getHeight(this);
}
public int getHeight(BinaryNode<T> node)
{
int h=0;
if(node!=null)
h=1+Math.max(node.getHeight(node.left),node.getHeight(node.right));
return h;
}
public int getNumOfNodes(){
int lnum=0,rnum=0;
if(left!=null)
lnum=left.getNumOfNodes();
if(right!=null)
rnum=right.getNumOfNodes();
return lnum+rnum+1;
}
}
3.二叉樹(shù)實(shí)現(xiàn)
package com.jimmy.impl;
import java.util.Stack;
import com.jimmy.BinaryTreeInterface;
public class Binarytree<T> implements BinaryTreeInterface<T> {
private BinaryNode<T> root; //只要一個(gè)數(shù)據(jù)節(jié)點(diǎn)就夠了
// 構(gòu)造空樹(shù)
public Binarytree(){
root=null;
}
// 用rootData構(gòu)造樹(shù)(有個(gè)根)
public Binarytree(T rootdata){
root=new BinaryNode<T>(rootdata) ;
}
// 用其他樹(shù)構(gòu)造樹(shù)
public Binarytree(T rootdata,Binarytree<T> leftTree,Binarytree<T> rightTree){
root=new BinaryNode<T>(rootdata) ;
if(leftTree!=null){
root.setLeft(leftTree.root);
}
if(rightTree!=null){
root.setRight(rightTree.root);
}
}
// 用rootData設(shè)置樹(shù)(有個(gè)根)
@Override
public void setTree(T rootData) {
root=new BinaryNode<T>(rootData) ;
}
// 用其他樹(shù)設(shè)置樹(shù)
public void setTree(T rootData, BinaryTreeInterface<T> left,BinaryTreeInterface<T> right) {
root=new BinaryNode<T>(rootData) ;
Binarytree leftTree=null;
Binarytree rightTree=null;
if((leftTree=(Binarytree)left)!=null){
root.setLeft(leftTree.root);
}
if((rightTree=(Binarytree)right)!=null){
root.setRight(rightTree.root);
}
}
@Override
public void clear() {
root=null;
}
@Override
public int getHeight() {
// TODO Auto-generated method stub
return root.getHeight();
}
@Override
public int getNumberOfRoot() {
// TODO Auto-generated method stub
return 0;
}
@Override
public T getRootData() {
if (root!=null)
return root.getData();
else
return null;
}
public BinaryNode<T> getRoot() {
return root;
}
public void setRoot(BinaryNode<T> root) {
this.root = root;
}
public int getNumOfNodes(){
return root.getNumOfNodes();
}
public void inOrderTraverse(){
inOrderTraverse(root);
}
//用棧方法遍歷
public void inOrderStackTraverse(){
Stack<BinaryNode> stack=new Stack<BinaryNode>();
BinaryNode cur=root;
//stack.push(root);
while(!stack.isEmpty()||(cur!=null)){
while(cur!=null)
{
stack.push(cur);
cur=cur.getLeft();
}
if(!stack.isEmpty())
{
BinaryNode tmp=stack.pop();
if(tmp!=null)
{System.out.println(tmp.getData());
cur=tmp.getRight();
}
}
}
}
// 遞歸遍歷
public void inOrderTraverse(BinaryNode<T> node){
if(node!=null)
{inOrderTraverse(node.getLeft());
System.out.println(node.getData());
inOrderTraverse(node.getRight());
}
}
public static void main(String[] args) {
Binarytree<String> t=new Binarytree<String>();
Binarytree<String> t8=new Binarytree<String>("8");
Binarytree<String> t7=new Binarytree<String>("7");
t.setTree("6",t7,t8); //用t7,t8設(shè)置樹(shù)t
t.inOrderStackTraverse();
System.out.println(t.getHeight());
}
}
通過(guò)此文,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Java數(shù)據(jù)結(jié)構(gòu)之鏈表、棧、隊(duì)列、樹(shù)的實(shí)現(xiàn)方法示例
- java數(shù)據(jù)結(jié)構(gòu)之樹(shù)基本概念解析及代碼示例
- Java數(shù)據(jù)結(jié)構(gòu)之紅黑樹(shù)的真正理解
- java數(shù)據(jù)結(jié)構(gòu)排序算法之樹(shù)形選擇排序詳解
- Java數(shù)據(jù)結(jié)構(gòu)與算法之樹(shù)(動(dòng)力節(jié)點(diǎn)java學(xué)院整理)
- Java中二叉樹(shù)數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)示例
- Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)之樹(shù)
相關(guān)文章
Scheduled如何會(huì)在上次任務(wù)執(zhí)行完才會(huì)執(zhí)行下次任務(wù)
這篇文章主要介紹了Scheduled如何會(huì)在上次任務(wù)執(zhí)行完才會(huì)執(zhí)行下次任務(wù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
java理論基礎(chǔ)Stream?reduce實(shí)現(xiàn)集合元素歸約
這篇文章主要為大家介紹了java理論基礎(chǔ)Stream?reduce實(shí)現(xiàn)集合元素歸約示例詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
Java基礎(chǔ)篇_有關(guān)接口和抽象類的幾道練習(xí)題(分享)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)篇_有關(guān)接口和抽象類的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
在Spring中實(shí)現(xiàn)異步處理的步驟和代碼演示
在Spring中實(shí)現(xiàn)異步處理通常涉及到@Async注解,通過(guò)步驟和代碼演示,可以在Spring應(yīng)用程序中實(shí)現(xiàn)異步處理,記住要根據(jù)你的應(yīng)用程序的實(shí)際需求來(lái)調(diào)整線程池和異步方法的設(shè)計(jì),感興趣的朋友跟隨小編一起看看吧2024-06-06
Java中集合List、Set和Map的入門(mén)詳細(xì)介紹
Java集合主要分為三種類型:Set(集)、List(列表)和Map(映射),下面這篇文章主要給大家介紹了關(guān)于Java中集合List、Set和Map的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
Java線程池配置的一些常見(jiàn)誤區(qū)總結(jié)
這篇文章主要給大家介紹了關(guān)于Java線程池配置的一些常見(jiàn)誤區(qū),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
IntelliJ?IDEA?2022安裝注冊(cè)永久激活
java開(kāi)發(fā)工具IntelliJ?IDEA深受用戶喜愛(ài),很多朋友對(duì)這個(gè)idea開(kāi)發(fā)工具比較忠心,一旦有新版本發(fā)出,很多小伙伴就迫不及待的想更新,今天小編給大家?guī)?lái)了idea2022.1最新永久激活碼,親測(cè)有效,喜歡的朋友快來(lái)下載體驗(yàn)吧2022-08-08

