java二叉樹查找间螟、遍歷、添加與刪除的代碼

把寫代碼過程中經(jīng)常用的內(nèi)容記錄起來损肛,下邊代碼是關(guān)于java二叉樹查找厢破、遍歷、添加與刪除的代碼治拿。

package com.structures.tree;

import java.util.ArrayList;

import java.util.NoSuchElementException;

import java.util.Stack;

public class Searchtree {

public Integer data;

public Searchtree left;

public Searchtree right;

public void setData(Integer data) {

this.data = data;

}

public Searchtree(Integer number) {

this.data = number;

}

public void setLeft(Searchtree left) {

this.left = left;

}

public void setRight(Searchtree right) {

this.right = right;

}

public void add(int number) {

if (number <= this.data)

add(number, this, this.left, 0);

else

add(number, this, this.right, 1);

}

private void add(int number, Searchtree father, Searchtree child, int tag) {

if (child == null) {

child = new Searchtree(number);

if (tag == 0)

father.setLeft(child);

else

father.setRight(child);

} else {

add(number, child, child.left, 0);

else

add(number, child, child.right, 1);

}

}

public Searchtree find(int number) {

if (number < data) {

return find(number, this);

} else if (number > data) {

return find(number, this);

} else {

return find(number, this);

}

}

private Searchtree find(int number, Searchtree tree) {

if (tree == null)

throw new NoSuchElementException(

"no such element in the binary search tree");

if (number < tree.data) {

return find(number, tree.left.left);

} else if (number > tree.data) {

return find(number, tree.right);

} else

return tree;

}

private ArrayList<Searchtree> trees = new ArrayList<Searchtree>();

private Searchtree findPrevious(int number, Searchtree tree) {

if (tree == null)

throw new NoSuchElementException(

"no such element in the binary search tree");

trees.add(tree);

if (number < tree.data) {

return findPrevious(number, tree.left);

} else if (number > tree.data) {

return findPrevious(number, tree.right);

} else {

Searchtree pre = trees.get(trees.size() - 2);

trees = null;

return pre;

}

}

public Searchtree findMin(Searchtree tree) {

if (tree == null)

throw new NoSuchElementException(

"no such element in the binary search tree");

else if (tree.left == null)

return tree;

else

return findMin(tree.left);

}

public Searchtree findMax(Searchtree tree) {

if (tree == null)

throw new NoSuchElementException(

"no such element in the binary search tree");

else if (tree.right == null)

return tree;

else

return findMax(tree.right);

}

public Searchtree remove(int number) {

return remove(number, this);

}

public Searchtree remove(int number, Searchtree tree) {

Searchtree delete = null;

if (tree == null)

throw new IndexOutOfBoundsException("tree size is 0");

else if (number < tree.data) {

tree.left = remove(number, tree.left);

} else if (number > tree.data) {

tree.right = remove(number, tree.right);

} else if (tree.left != null && tree.right != null) {

delete = findMin(tree.right);

tree.setData(delete.data);

tree.setRight(remove(tree.data, tree.right));

delete = null;

} else {

delete = tree;

if (delete.left == null) {

tree = tree.right;

} else if (delete.right == null) {

tree = tree.left;

}

delete = null;

}

return tree;

}

public void preorder() {

System.out.print(data + " ");

if (left != null)

left.preorder();

if (right != null)

right.preorder();

}

public void inorder() {

if (left != null)

left.inorder();

System.out.print(data + " ");

if (right != null)

right.inorder();

}

public void postorder() {

if (left != null)

left.postorder();

if (right != null)

right.postorder();

System.out.print(data + " ");

}

public int getDepth(Searchtree root) {

int depth;

if (root == null)

return 0;

else {

depth = 1 + Math.max(getDepth(root.left), getDepth(root.right));

return depth;

}

}

public static void main(String[] args) {

Searchtree tree = new Searchtree(5);

tree.add(3);

tree.add(7);

tree.add(2);

tree.add(4);

tree.add(6);

tree.add(8);

tree.add(1);

tree.add(1);

tree.remove(1);

tree.preorder();

System.out.println();

tree.inorder();

System.out.println();

System.out.println(tree.getDepth(tree));

System.out.println(tree.find(7).data);

System.out.println(tree.findPrevious(8, tree).data);

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摩泪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子劫谅,更是在濱河造成了極大的恐慌见坑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捏检,死亡現(xiàn)場離奇詭異荞驴,居然都是意外死亡,警方通過查閱死者的電腦和手機贯城,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門熊楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冤狡,你說我怎么就攤上這事孙蒙∠钐模” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵挎峦,是天一觀的道長香追。 經(jīng)常有香客問我,道長坦胶,這世上最難降的妖魔是什么透典? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮顿苇,結(jié)果婚禮上峭咒,老公的妹妹穿的比我還像新娘。我一直安慰自己纪岁,他們只是感情好凑队,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幔翰,像睡著了一般漩氨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遗增,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天叫惊,我揣著相機與錄音,去河邊找鬼做修。 笑死霍狰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饰及。 我是一名探鬼主播蔗坯,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旋炒!你這毒婦竟也來了步悠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瘫镇,失蹤者是張志新(化名)和其女友劉穎鼎兽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铣除,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡谚咬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尚粘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片择卦。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秉继,到底是詐尸還是另有隱情祈噪,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布尚辑,位于F島的核電站辑鲤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杠茬。R本人自食惡果不足惜月褥,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓢喉。 院中可真熱鬧宁赤,春花似錦、人聲如沸栓票。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽走贪。三九已至哆窿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厉斟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工强衡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留擦秽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓漩勤,卻偏偏與公主長得像感挥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子越败,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,030評論 0 2
  • 源站:http://fengyuanchen.github.io/viewer/ 應(yīng)用: html: 源碼上是正常...
    羊繪霖閱讀 5,493評論 0 2
  • 你站在橋上看風(fēng)景 看風(fēng)景的人在樓上看你 明月裝飾了你的窗子 你裝飾了別人的夢 ???
    胖乎乎先生閱讀 243評論 0 10
  • 【每日一談心】:QQ触幼,談心時間到啦,你今天很開心吧究飞。 QQ說:媽媽我很開心 那你開心的事兒都有什么呢置谦? QQ說:我...
    674e09b5464a閱讀 203評論 0 0
  • 時間可以讓兩人相愛 但隨著越來越久的相處媒峡,多數(shù)人都逃不過相看兩厭的下場。 也許會有很多人會以老夫老妻來解釋葵擎。 時間...
    男孜閱讀 550評論 0 0