赞
踩
由于普通的二叉树并没有插入删除的意义,所以在创建二叉树时只需要手动创建二叉树就行,因为普通二叉树没有条件限制比如:
所以在普通二叉树里并没有增删的意义,创建时只需要手动创建即可。
创建二叉树的第一步:先写一个创建单个节点的函数,并将节点里左右指针都初始化为NULL,这样也方便后续链接操作。 第二步:手动申请7个节点,并将将节点之间进行链接。最终形成以下的逻辑图片。
左子树展开图
右子树展开图
从上图的左右子树展开图图可以看出,求节点根数需要分别递归计算根的左子树与右子树,当递归到NULL时返回0,当左右子树递归完后需要再加上1(自身),再进行返回。最终计算出该子树节点数量为7。
递归展开图
因为叶子节点的特点是左右子树都为NULL,利用这一特性,当递到根的左右子树都为NULL,就返回1表示这个节点是叶子节点。如果左节点或又节点其中一个是NULL并不会返回1,而是继续递归。当递归到叶子节点时直接返回一。最终得得出根的左子树节点数与根的右子树节点数。
递归展开图
由上图的展开图可以看出,假设k==3,分别递归根的左子树与右子树的第k层,每一次递归的时候都让k-1,当k==1的时候就说明已经到了第k层直接返回1,当递归到第k-1层的时,只需要判断k-1层的左节点与右节点,如果为NULL就返回0,最后将k层返回的数字进行相加并return就得到第k层节点数。
左子树深度展开图
右子树深度展开图
想要计算二叉树的深度,就要计算根的左子树与右子树的深度,将左子树的深度与右子树的深度进行比较,并返回较大值,如上图,通过递归展开,会得知左子树的深度为3,右子树的深度为2,最终返回左子树的深度+1,所以上图二叉树的深度为4。
递归展开图
由上图可见,当需要找x节点时,一开始会先判断根节点是否符合条件,如果符合条件直接返回,如果不符合就先递归根的左子树,当左子树递归完后发现并没有找到值会返回NULL,此时指针为NULL,会递归根的右子树,当发现有节点符合值的时候会直接返回并给指针赋值,防止继续递归。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。