网站的备案号在哪高校网站建设方案
网站的备案号在哪,高校网站建设方案,做soho要不要注册网站,网站为什么要续费【完全二叉树】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数 :star:解法1 按照完全二叉树解法2 按照普通二叉树#xff1a;深度优先遍历 后序 左右中解法3 按照普通二叉树#xff1a;广度优先遍历 层序遍历 ---------------#x1f388;#x1f388;题目链接… 【完全二叉树】【深度优先】【广度优先】Leetcode 222 完全二叉树的节点个数 :star:解法1 按照完全二叉树解法2 按照普通二叉树深度优先遍历 后序 左右中解法3 按照普通二叉树广度优先遍历 层序遍历 ---------------题目链接------------------- ⭐️解法1 按照完全二叉树
完全二叉树只有两种情况 情况一就是满二叉树 情况二最后一层叶子节点没有满。
对于情况一可以直接用 2 ^ 树深度 - 1 来计算注意这里根节点深度为1。 对于情况二分别递归左孩子和右孩子递归到某一深度一定会有左孩子或者右孩子为满二叉树然后依然可以按照情况1来计算。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val val;* this.left left;* this.right right;* }* }*/
class Solution {public int countNodes(TreeNode root) {// 按照完全二叉树的特性 满二叉树的结点数为2^depth - 1// 完全二叉树只有两种情况情况一就是满二叉树情况二最后一层叶子节点没有满// 如果是满二叉树则节点个数为2^depth - 1// 对于情况二分别递归左孩子和右孩子递归到某一深度一定会有左孩子或者右孩子为满二叉树然后依然可以按照情况1来计算。if(root null) return 0;TreeNode left root.left;TreeNode right root.right;int leftDepth 1, rightDepth 1;while(left ! null){left left.left;leftDepth ;}while(right ! null){right right.right;rightDepth ;}if(leftDepth rightDepth){return (int)Math.pow(2,leftDepth) -1;}// 单层递归逻辑int leftnum countNodes(root.left); //左int rightnum countNodes(root.right);//右int result leftnum rightnum 1; //中return result;}
}解法2 按照普通二叉树深度优先遍历 后序 左右中
/递归逻辑左子树个数 右子树个数 加在一起返回给中间节点 1
时间复杂度O(n) 空间复杂度O(log n)算上了递归系统栈占用的空间
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val val;* this.left left;* this.right right;* }* }*/
class Solution {public int countNodes(TreeNode root) {// 深度优先遍历 后序 左右中 if(root null) return 0; //终止条件// 递归逻辑左子树个数 右子树个数 加在一起返回给中间节点 1int leftnum countNodes(root.left);int rightnum countNodes(root.right);int result leftnumrightnum1;return result;}
}
解法3 按照普通二叉树广度优先遍历 层序遍历
时间复杂度O(N) 空间复杂度O(N)
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val val;* this.left left;* this.right right;* }* }*/
class Solution {public int countNodes(TreeNode root) {// 层序遍历if(root null) {return 0;}QueueTreeNode myqueue new LinkedList();int result 0;myqueue.add(root);while(!myqueue.isEmpty()){int size myqueue.size();result size;for(int i 0; isize;i){TreeNode temp myqueue.poll();if(temp.left ! null){myqueue.add(temp.left);}if(temp.right ! null){myqueue.add(temp.right);}}}return result;}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/89298.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!