树、二叉树的介绍

定义


二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树 。 ### 基本形态

二叉树是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态: [3]
1、空二叉树——如图 ;
空二叉树
2、只有一个根结点的二叉树——如图 ;
在这里插入图片描述
3、只有左子树——如图 ;
在这里插入图片描述
4、只有右子树——如图 ;
在这里插入图片描述
5、完全二叉树——如图 。
在这里插入图片描述

特殊类型

1、满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树 。

2、完全二叉树:深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k,有n个结点的满二叉树中编号从1到n的结点一一对应时,称为完全二叉树 。
完全二叉树的特点是叶子结点只可能出现在层序最大的两层上,并且某个结点的左分支下子孙的最大层序与右分支下子孙的最大层序相等或大1。

书面语

  • 性质1:二叉树的第i层上至多有2i-1(i≥1)个节点 。
  • 性质2:深度为h的二叉树中至多含有2h-1个节点 。
  • 性质3:若在任意一棵二叉树中,有n个叶子节点,有n2个度为2的节点,则必有n0=n2+1 。
  • 性质4:具有n个节点的完全二叉树深为log2x+1(其中x表示不大于n的最大整数) 。
  • 性质5:若对一棵有n个节点的完全二叉树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点:
  • 当i=1时,该节点为根,它无双亲节点 。
  • 当i>1时,该节点的双亲节点的编号为i/2 。
  • 若2i≤n,则有编号为2的左孩子,否则没有左孩子 。
  • 若2+1≤n,则有编号为2i+1的右孩子,否则没有右孩子 。

简单实现数的前中后序遍历

二叉树

根结点为0

左儿子 2i+1

右儿子 2i+2

父节点(i-1)/2

先序遍历:根左右

中序遍历:左根右

后序遍历:左右根

function TreeAndArray(arr) {

    preOrder(arr, 0)
    inOrder(arr, 0)
    PostOrder(arr,0)
        /* 
            树的先序遍历
        */
    function preOrder(arr, index) {
        if (index >= arr.length) {
            return;
        }
        console.log(arr[index]); //先输出根节点
        preOrder(arr, index * 2 + 1); //左子树
        preOrder(arr, index * 2 + 2) //右子树
    }
    /* 
     中序遍历
    */
  
    function inOrder(arr, index) {
        if (index >= arr.length) {
            return;
        }
        inOrder(arr, index * 2 + 1);
        console.log(arr[index]);
        inOrder(arr, index * 2 + 2)
    }
    /* 
        后序变历
    */
  function PostOrder(arr,index){
    if (index >= arr.length) {
        return;
    }
    PostOrder(arr,2*index+1)
    PostOrder(arr,2*index+2)
    console.log(arr[index]);
   }
}
TreeAndArray([78, 56, 34, 43, 4, 1, 15, 2, 23])
结果
78,56,43,2,23,4,34,1,15,
2,43,23,56,4,78,1,34,15,
2,23,43,4,56,1,15,34,78,
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值