Giter Site home page Giter Site logo

xzbinarytree's Introduction

XZBinaryTree

在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作’左子树’和“右子树”,左子树和右子树同时也是二叉树。
二叉树的子树有左右之分,并且次序不能任意颠倒。
二叉树是递归定义的。

二叉排序树

二叉查找树或二叉搜索树
1)若左子树不空,则左子树上所有结点的值均小于它的根节点的值;
2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值
3)左、右子树也分别为二叉排序树
4)没有键值相等的节点(?可能是因为不好处理键值相等的节点到底是左节点还是右节点吧)

二叉树节点定义

采用单项链表的形式,只从根节点指向孩子节点,不保存父节点。

创建二叉排序树

二叉树中左右节点值本身没有大小之分,所以如果要创建二叉树,就需要考虑如何处理某个节点是左节点还是右节点,如何终止某个子树而切换到另一个子树。 因此我选择了二叉排序树,二叉排序树中对于左右节点有明确的要求,程序可以自动根据键值大小自动选择是左节点还是右节点。

二叉树中的某个位置的节点

类似索引操作,按层次遍历,位置从0开始算。

先序遍历

根 ->左子树 ->右子树 典型递归**

中序遍历

左子树 -> 根 -> 右子树

后序遍历

左子树 -> 右子树 -> 根

层次遍历

按照从上到下,从左到右的次序进行遍历。先遍历完一层,再遍历下一层。叫做广度优先遍历

二叉树深度

从根节点到叶子结点依次经过的结点形成树的一条路径,最长路径的长度为树的深度。
1)如果根节点为空,则深度为0;
2)如果左右节点都是空,则深度为1;
3)递归**:二叉树的深度=max(左子树的深度,右子树的深度)+ 1

二叉树的宽度

二叉树的宽度定义为各层节点数的最大值。

二叉树的所有节点数

递归**:所有节点数 = 左子树节点数 + 右子树节点数 + 1

二叉树某层中的节点数

1)根节点为空,则节点数为0;
2)层为1,则节点数为1(即根节点)
3)递归**:二叉树第k层节点数 = 左子树第k-1层节点数+右子树第k-1层节点数

二叉数叶子节点数

叶子节点,也叫终端节点,是左右子树都是空的节点。

二叉树最大距离 (二叉树的直径)

二叉树中任意两个节点都有且仅有一条路径,这个路径的长度叫这两个节点的距离。二叉树中所有节点之间的距离的最大值就是二叉树的直径。
有一种解法,把这个最大距离划分了3种情况:
1)这2个节点分别在根节点的左子树和右子树上,他们之间的路径肯定经过根节点,而且他们肯定是根节点左右子树上最远的叶子节点(他们到根节点的距离=左右子树的深度和)。
2)这2个节点都在左子树上
3)这2个节点都在右子树上
综上,只要取这3种情况中的最大值,就是二叉树的直径。

判断二叉树是否为满二叉树

除了叶节点外每一个节点都有左右子叶且叶子节点都处在最底层的二叉树。
满二叉树的一个特性是:叶子数=2^(深度-1),因此我们可以根据这个特性来判断二叉树是否是满二叉树。

判断二叉树是否为平衡二叉树

它是一颗空树或它的左右两个子树的高度差绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

翻转二叉树

又叫二叉树镜像,就是把二叉树的左右子树对调,当然用的是递归。

xzbinarytree's People

Contributors

kkxz79 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.