扫码关注公众号
如何实现二叉树层次遍历?
与树的前中后序遍历的DFS思想不同,层次遍历用到的是BFS思想。一般DFS用递归去实现(也可以用栈实现),BFS需要用队列去实现。层次遍历的
二叉树的遍历方式有哪几种
二叉树的遍历分成三种,按照根节点的访问先后分为:先序遍历(先根遍历):先访问根节点,然后访问左子树,最后访问右子树。中序遍历(中根遍历):先
某棵完全二叉树上有698个节点,则该二叉树的叶子节点数为
正确答案是A首先明确完全二叉树的概念:最下面两层有度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上。因为2^9-1<698<2^10-1,所以共有10层,前九层的节点数为2^9-1=511,第十层为689-511=187。187/2=93余1,所以第九层有93个度为2的节点,一个度为1的节点。第九层叶节点为256-94=162;第十层叶节点为187;叶节点总数为187+162=349.
求二叉树两个结点的最低公共祖先节点,给出代码实现
本道是大厂高频代码实现题,主要有3个核心点1.对每个结点的孩子进行递归遍历,如果左孩子里一个需求结果都没有,就不是祖先节点2.如果两个结点都在一侧出来,也不是最低祖先结点。3.最低孩子结点只可能是一左一右,而且具体镜像性,就是可以结点1在左,也可能结点2在左,不要忘记加一个elseTreeNodegetLastCommonParent(TreeNoderoot,TreeNodet1,TreeNodet2){if(findNode(root.left,t1)){if(findNode(root.right,t2)){returnroot;}else{returngetLastCommonParent(root.left,t1,t2);}}else{if(findNode(root.left,t2)){returnroot;}else{returngetLastCommonParent(root.right,t1,t2)}}}//查找节点node是否在当前二叉树中booleanfindNode(TreeNoderoot,TreeNodenode){if(root==null||node==null){returnfalse;}if(root==node){returntrue;}booleanfound=findNode(root.left,node);if(!found){found=findNode(root.right,node);}returnfound;}