成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)結(jié)構(gòu)之二叉樹(java版)

JayChen / 2123人閱讀

摘要:二叉樹是數(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)系,

更多關(guān)于java的文章請(qǐng)戳這里:(您的留言意見是對(duì)我最大的支持)

我的文章列表
Email:[email protected]

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66960.html

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)之二叉樹

    摘要:數(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é)...

    lansheng228 評(píng)論0 收藏0
  • PHPer面試必看:分門別類帶你擼《劍指Offer》之二叉樹

    摘要:例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹并返回。操作給定的二叉樹,將其變換為源二叉樹的鏡像。劍指中還有一道類似的變種題目,就是下面的這道,之字形遍歷二叉樹。最后下面的兩道題目分別運(yùn)用了二叉樹先序中序遍歷算法。 開篇 以下內(nèi)容可能偏應(yīng)試但很好理解,所以大家一定要堅(jiān)持看下去,因?yàn)槲覀冏儚?qiáng)的過程注定孤獨(dú)的,堅(jiān)持下來就會(huì)看到明天的太陽。 回顧 showImg(https://user-...

    li21 評(píng)論0 收藏0
  • 利用PHP實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)之二叉樹(小白系列文章五)

    摘要:回來更新一波,最近刷劍指,才又發(fā)現(xiàn)樹真是一個(gè)大頭,二叉樹的題目和變化運(yùn)用好多啊二叉樹算法引子很多人說二叉樹沒什么卵用,我覺得是他的工資和公司讓他跨不過這個(gè)坎還有很多人學(xué)了一些樹的知識(shí),發(fā)現(xiàn)也用不上,我想說的是,讀一本書體現(xiàn)不了這本書 回來更新一波,最近刷《劍指offer》,才又發(fā)現(xiàn)樹真是一個(gè)大頭,二叉樹的題目和變化運(yùn)用好多啊~ /** * PHP二叉樹算法 * Create...

    developerworks 評(píng)論0 收藏0
  • 利用PHP實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)之二叉樹(小白系列文章六)

    摘要:回來更新一波,最近刷劍指,才又發(fā)現(xiàn)樹真是一個(gè)大頭,二叉樹的題目和變化運(yùn)用好多啊二叉樹算法引子很多人說二叉樹沒什么卵用,我覺得是他的工資和公司讓他跨不過這個(gè)坎還有很多人學(xué)了一些樹的知識(shí),發(fā)現(xiàn)也用不上,我想說的是,讀一本書體現(xiàn)不了這本書 回來更新一波,最近刷《劍指offer》,才又發(fā)現(xiàn)樹真是一個(gè)大頭,二叉樹的題目和變化運(yùn)用好多啊~ /** * PHP二叉樹算法 * Create...

    Cympros 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<