数据结构(5)二叉树-1 插入节点 和 中序遍历

在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。

一棵深度为k,且有2^k-1个节点称之为满二叉树;深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。


二叉树的结构

从上图中可以看出 二叉树一个左指针一个右指针 每一个节点 最多有两个分叉

下面来写一个数组里的元素按照大小规律放入二叉树中的示范:

var arr = [123,12,2,14,144,1245,1,546,568,234,36,42,3467];

左指针放小 右指针放大

先把 第一个元素 放入根节点 1图


1

然后放入 第二个元素 12 12比123小 所以放在 123的左边              2图


2

接下来放第三个元素 先和根节点相比 2比123 小 所以去左边 左边已经有了 就和左边第一个先相比一下 2比12小 所以 2放在 12的左边                  3图


3

接下来放第四个 14  还是先和 根结点相比 比 123 小在和左边的12相比 比12 大 所以 放在 12右边          4图

4

再放第五个 144 先和根节点相比 比 123 大 然后去根节点右边 根结点右边没有节点 那么直接放在根节点右边即可  5 图


5

然后同样的理论 放第六个


6

第七个


7

第八个


8

第九个


9

最后全部放入 就是这个样子


最终

我们按照 先左 再根 再右的 遍历方法(中序遍历,前序和后序会在后面的章节讲到)来进行遍历

注意:有两个分叉的 就可以成为 根 其中 12 1245 546 还有123这是最根本的根 父根

就有了  1,2,12,14,36,42,123,144,234,546,568,1245,3467 从小到大排好的顺序。

下面用js来写一个二叉树:

先建立一个节点方法:

function Node(value){

        this.value = value;//作为根结点的值 所以创建节点的一瞬间 就变成了根节点

        this.left = null;//左指针

        this.right = null;//右指针

        this.add = function(value){ //插入节点的方法

                if(value<this.value){  //先判断一下传入的值是否小于根节点的值 如果小于 就去右面操作 不小于 就去左边操作

                        if(this.left!=null){ //如果右指针已经有节点了 那么 用右指针去调用 add 直到 右边或者左边没有值了

                            this.left.add(value);

                        }else{

                            this.left = new Node(value);

                        }

                }else{

                     if(this.right!=null){//如果左指针已经有节点了 那么 用左指针去调用 add 直到 右边或者左边没有值了

                           this.right.add(value);

                     }else{

                            this.right = new Node(value);

                     }

                }

        }

        this.iterate = function(arr){ //中序遍历 将一个数组传入这个方法中,用于接受遍历的值

            if(this.left!=null){//先判断右边有没有节点 如果有 就再次调用iterate方法 一直到右边没有的时候 把值赋给arr 这个过程结束时 会把最根节点右边所有的值排好序 给arr

                this.left.iterate(arr);

            }

            arr.push(this.value);

            if(this.right!=null){//然后再判断左边

                this.right.iterate(arr);

            }

        }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容