摘要:二叉樹是數(shù)據(jù)結(jié)構(gòu)中很重要的結(jié)構(gòu)類型,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)也是深入學(xué)習(xí)編程的必由之路,這里我們簡單介紹下我對(duì)于二叉樹的理解,水平有限,如有錯(cuò)誤還請(qǐng)不吝賜教。
二叉樹是數(shù)據(jù)結(jié)構(gòu)中很重要的結(jié)構(gòu)類型,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)也是深入學(xué)習(xí)編程的必由之路,這里我們簡單介紹下我對(duì)于二叉樹的理解,水平有限,如有錯(cuò)誤還請(qǐng)不吝賜教。
首先照例定義一個(gè)二叉樹的節(jié)點(diǎn)類class Node { private int value;//二叉樹的值 private Node leftChild;//左孩子節(jié)點(diǎn) private Node rightChild;//右孩子節(jié)點(diǎn) public Node(int value, Node leftChild, Node rightChild) { this.value = value; this.leftChild = leftChild; this.rightChild = rightChild; } }插入節(jié)點(diǎn)
本次用到的二叉樹是順序二叉樹,即判斷當(dāng)前插入的節(jié)點(diǎn)值與二叉樹中父節(jié)點(diǎn)比較,如果value值大于父節(jié)點(diǎn),插入父節(jié)點(diǎn)的右子樹種,反之,插入左子樹種,以此類推,直到找到相應(yīng)的字節(jié)點(diǎn)插入。
public void insert(int value) { if (parent == null) {//父節(jié)點(diǎn)為空判斷 Node node = new Node(value, null, null); parent = node; length++; } else { currentPoint = parent;//將當(dāng)前結(jié)點(diǎn)指向父節(jié)點(diǎn) while(true){//循環(huán)遍歷節(jié)點(diǎn),查找適合的插入位置 if(currentPoint.value>value){ if(currentPoint.leftChild!=null){ currentPoint=currentPoint.leftChild; }else{ currentPoint.leftChild=new Node(value,null,null); length++; break; } }else{ if(currentPoint.rightChild!=null){ currentPoint=currentPoint.rightChild; }else{ currentPoint.rightChild=new Node(value,null,null); length++; break; } } } } }中序遍歷二叉樹節(jié)點(diǎn)
public String visit(Node node) { sb.append(node.value+"("); if (node.leftChild != null) visit(node.leftChild);//遞歸遍歷左子樹 if (node.rightChild != null) visit(node.rightChild);//遞歸遍歷右子樹 sb.append(")"); return sb.toString(); }整體代碼
public class BinaryTree { private Node parent; private Node currentPoint; private StringBuffer sb; private int length=0; class Node { private int value; private Node leftChild; private Node rightChild; public Node(int value, Node leftChild, Node rightChild) { this.value = value; this.leftChild = leftChild; this.rightChild = rightChild; } } public Node getParent(){ return parent; } public BinaryTree() { sb=new StringBuffer(); } public void insert(int value) { if (parent == null) { Node node = new Node(value, null, null); parent = node; length++; } else { currentPoint = parent; while(true){ if(currentPoint.value>value){ if(currentPoint.leftChild!=null){ currentPoint=currentPoint.leftChild; }else{ currentPoint.leftChild=new Node(value,null,null); length++; break; } }else{ if(currentPoint.rightChild!=null){ currentPoint=currentPoint.rightChild; }else{ currentPoint.rightChild=new Node(value,null,null); length++; break; } } } } } public String visit(Node node) { sb.append(node.value+"("); if (node.leftChild != null) visit(node.leftChild); if (node.rightChild != null) visit(node.rightChild); sb.append(")"); return sb.toString(); } public int getLength(){ return length; } @Override public String toString() { return visit(parent); } }main函數(shù)測(cè)試
public static void main(String[] args) { BinaryTree bt = new BinaryTree(); bt.insert(1); bt.insert(3); bt.insert(2); bt.insert(5); bt.insert(6); bt.insert(7); bt.insert(8); bt.insert(9); bt.insert(10); bt.insert(11); bt.insert(12); bt.insert(13); bt.insert(14); bt.insert(15); System.out.println(bt.getLength()); System.out.println(bt.toString()); }結(jié)果輸出
其中括號(hào)表示層級(jí)包含關(guān)系,
我的文章列表
Email:[email protected]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66960.html
摘要:數(shù)據(jù)結(jié)構(gòu)之二叉樹本文講解二叉樹的基本操作查找節(jié)點(diǎn)計(jì)算樹的高度清空樹遞歸遍歷先序遍歷中序遍歷后序遍歷按層遍歷來看一下樹的結(jié)構(gòu)首先,為了方便后面看到效果,先手動(dòng)初始化一個(gè)有個(gè)節(jié)點(diǎn)的二叉樹查找節(jié)點(diǎn)查找節(jié)點(diǎn)遞歸左子樹遞歸右子樹計(jì)算樹的深度計(jì)算樹的深 數(shù)據(jù)結(jié)構(gòu)之二叉樹 本文講解二叉樹的基本操作: 查找節(jié)點(diǎn) 計(jì)算樹的高度 清空樹 遞歸遍歷:先序遍歷、中序遍歷、后序遍歷 按層遍歷 來看一下樹的結(jié)...
摘要:例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹并返回。操作給定的二叉樹,將其變換為源二叉樹的鏡像。劍指中還有一道類似的變種題目,就是下面的這道,之字形遍歷二叉樹。最后下面的兩道題目分別運(yùn)用了二叉樹先序中序遍歷算法。 開篇 以下內(nèi)容可能偏應(yīng)試但很好理解,所以大家一定要堅(jiān)持看下去,因?yàn)槲覀冏儚?qiáng)的過程注定孤獨(dú)的,堅(jiān)持下來就會(huì)看到明天的太陽。 回顧 showImg(https://user-...
摘要:回來更新一波,最近刷劍指,才又發(fā)現(xiàn)樹真是一個(gè)大頭,二叉樹的題目和變化運(yùn)用好多啊二叉樹算法引子很多人說二叉樹沒什么卵用,我覺得是他的工資和公司讓他跨不過這個(gè)坎還有很多人學(xué)了一些樹的知識(shí),發(fā)現(xiàn)也用不上,我想說的是,讀一本書體現(xiàn)不了這本書 回來更新一波,最近刷《劍指offer》,才又發(fā)現(xiàn)樹真是一個(gè)大頭,二叉樹的題目和變化運(yùn)用好多啊~ /** * PHP二叉樹算法 * Create...
摘要:回來更新一波,最近刷劍指,才又發(fā)現(xiàn)樹真是一個(gè)大頭,二叉樹的題目和變化運(yùn)用好多啊二叉樹算法引子很多人說二叉樹沒什么卵用,我覺得是他的工資和公司讓他跨不過這個(gè)坎還有很多人學(xué)了一些樹的知識(shí),發(fā)現(xiàn)也用不上,我想說的是,讀一本書體現(xiàn)不了這本書 回來更新一波,最近刷《劍指offer》,才又發(fā)現(xiàn)樹真是一個(gè)大頭,二叉樹的題目和變化運(yùn)用好多啊~ /** * PHP二叉樹算法 * Create...
閱讀 2245·2021-11-17 09:33
閱讀 2786·2021-11-12 10:36
閱讀 3410·2021-09-27 13:47
閱讀 901·2021-09-22 15:10
閱讀 3499·2021-09-09 11:51
閱讀 1405·2021-08-25 09:38
閱讀 2766·2019-08-30 15:55
閱讀 2619·2019-08-30 15:53