08
2021
06

求二叉树中结点的个数

进入函数后先判断根结点是不是空,是空的话返回0个,然后统计左子树的结点个数,右子树的节点个数,最后总的个数就等于左子树结点个数加上右子树结点个数加上根结点也就是1。
08
2021
06

求二叉树的高度

这里也采用递归的思想,如果根结点是空的话,高度就是0,返回一个0,如果不为空看一下左右子树的高度,因为整棵树的高度就是左右子树中高度的最大值,最后两个比较,返回高度最大的子树的高度加1,加1就是加上根结点自己。
08
2021
06

层序遍历二叉树

层序遍历使用了队列这个数据结构,层序遍历就是把二叉树从上到下,一层一层打印出来,我们先把头结点加入队列当中,然后定义一个循环,进去先将队列中的队头元素的内容打印出来,然后将头结点出队列,然后判断如果头结点的左孩子不为空,就把左孩子放进队列,右孩子不为空就把右孩子放进队列,然后进入下一次循环,继续打印队头元素,然后判断左右孩子,不为空的放进队列,直到队列为空。
08
2021
06

前/中/后遍历二叉树(递归&非递归)

前序递归遍历:如果根不为空,就将根结点打印出来,然后前序访问它的左子树,访问它的右子树。前序非递归遍历:这里使用栈来实现,首先将根放进栈中然后定义一个循环,循环条件是栈不为空,首先将栈顶元素弹出,并用一个结点保存,如果栈顶的元素不是空,就输出栈顶元素的数据,然后看它的左右子树,先把右子树压入栈中,再压左子树,(因为栈后进先出,先要访问左子树,所以左子树后进入),每次进入循环如果栈顶为空的化就不进行操作,直接进行操作,如果栈顶不为空的话再进行下面操作。直到所有结点都被遍历。中序递归遍历:和前序类似
08
2021
06

创建二叉树 树的结构如下:

这里我们创建二叉树用的是静态创建即不是每次从标准输入读入数据然后插入树中,而是将定义好的一个序列,也就是一个数组构建一棵树,这里采用的是递归创建,首先来看一下参数,首先传进来的就是根结点,然后是要构建树的序列然后是数组下标索引,负责遍历整个数组,然后是数组的大小,然后是无效值,遇到无效值表示当前结点为空,就返回上一层函数调用,递归程序的出口是index<size&&array[index]!=invalid,因为数组下标是从0-size-1所以一旦到达size就该退出了,还

08
2021
06

求二叉树中第k层节点的个数

int numsOfkLevelTreeNode(TreeNode root,int k){            if(root == null||k<1){                return 0;            }        &

08
2021
06

求二叉树中叶子节点的个数

int numsOfNoChildNode(TreeNode root){        if(root == null){            return 0;        }        if(root.left==null&&root.right==null){   
08
2021
06

求二叉树中节点的个数

int numOfTreeNode(TreeNode root){        if(root == null){            return 0;        }        int left = numOfTreeNode(root.left);       
08
2021
06

求二叉树的最小深度

int getMinDepth(TreeNode root){        if(root == null){            return 0;        }        return getMin(root);    }    int getMin(TreeNo
08
2021
06

求二叉树的最大深度

int maxDeath(TreeNode node){    if(node==null){        return 0;    }    int left = maxDeath(node.left);    int right = maxDeath(node.right);    return Math.max(left,right) + 1;}