当前位置: 首页 > news >正文

做网站的知名公司淘宝网页版电脑版

做网站的知名公司,淘宝网页版电脑版,河北模板网站建设,站内推广的方式有哪些一、二叉树的基础知识 常见的二叉树类型#xff1a; 满二叉树#xff08;Full Binary Tree#xff09;#xff1a; 只有度为0和度为2的结点#xff0c;且度为0的结点位于最后一层。完全二叉树#xff08;Complete Binary Tree#xff09;#xff1a; 倒数第二层是满二…一、二叉树的基础知识 常见的二叉树类型 满二叉树Full Binary Tree 只有度为0和度为2的结点且度为0的结点位于最后一层。完全二叉树Complete Binary Tree 倒数第二层是满二叉树倒数第一层的结点全部位于左方。二叉搜索树Binary Search Tree 二叉排序树按照左根右的顺序遍历二叉排序树后得到的数组是升序的。平衡二叉搜索树Self-balancing Binary Search Tree AVL树左右两个子树的高度差的绝对值不超过1并且左右两个子树都是一棵平衡二叉树。 二叉树的遍历方法 深度优先遍历Depth First Search使用栈实现 前序遍历中序遍历后序遍历 广度优先遍历Breath First Search使用队列实现 层序遍历 二、深度优先遍历 1. 144【二叉树的前序遍历】 题目 给你二叉树的根节点 root 返回它节点值的前序遍历。代码 方法一递归法 class Solution {public ListInteger preorderTraversal(TreeNode root) {ListInteger ans new LinkedList();preorder(root,ans);return ans;}public void preorder(TreeNode node,ListInteger ans){if(node null) return;ans.add(node.val); //先保存根结点的值再遍历左右子树preorder(node.left,ans);preorder(node.right,ans);} }方法二迭代法 class Solution {public ListInteger preorderTraversal(TreeNode root) {//使用迭代法对二叉树进行前中后序遍历利用的是栈结构//首先将根入栈因为栈是FILO所以要先将右结点入栈再将左结点入栈ListInteger ans new LinkedList();DequeTreeNode stack new LinkedList();if(root null) return ans;stack.push(root);while (!stack.isEmpty()){TreeNode node stack.pop();ans.add(node.val);if(node.right ! null){stack.push(node.right);}if(node.left ! null){stack.push(node.left);}}return ans;} }2. 145【二叉树的后序遍历】 题目 给你一棵二叉树的根节点 root 返回其节点值的后序遍历 。代码 方法一递归法 class Solution {public ListInteger postorderTraversal(TreeNode root) {ListInteger ans new LinkedList();postorder(root,ans);return ans;}public void postorder(TreeNode node,ListInteger ans){if(node null) return;postorder(node.left,ans);postorder(node.right,ans);ans.add(node.val);} }方法二迭代法 class Solution {public ListInteger postorderTraversal(TreeNode root) {//前序遍历返回的ans是根左右如果调换while中右左入栈的顺序//就会得到根右左顺序的ans将ans反转就会得到左右根ListInteger ans new LinkedList();if(root null) return ans;DequeTreeNode stack new LinkedList();stack.push(root);while(!stack.isEmpty()){TreeNode node stack.pop();ans.add(node.val);if(node.left ! null){stack.push(node.left);}if(node.right ! null){stack.push(node.right);}}Collections.reverse(ans);return ans;} }3. 94【二叉树的中序遍历】 题目 给定一个二叉树的根节点 root 返回它的中序遍历 。代码 方法一递归法 class Solution {public ListInteger inorderTraversal(TreeNode root) {ListInteger ans new LinkedList();inorder(root,ans);return ans;}public void inorder(TreeNode node, ListInteger ans){if(node null) return;inorder(node.left,ans);ans.add(node.val);inorder(node.right,ans);} }方法二迭代法 class Solution {public ListInteger inorderTraversal(TreeNode root) {//首先判断当前结点是否为空不为空将当前结点的左结点入栈//若为空取栈顶元素加入ans将栈顶元素的右结点作为当前结点//继续重复上面步骤直到当前结点为空且栈为空为止。ListInteger ans new LinkedList();if(root null) return ans;DequeTreeNode stack new LinkedList();TreeNode node root;while (node ! null || !stack.isEmpty()){if(node ! null){stack.push(node);node node.left;}else{node stack.pop();ans.add(node.val);node node.right;}}return ans;} }三、广度优先遍历 1. 102【二叉树的层序遍历】 题目 给你二叉树的根节点 root 返回其节点值的 层序遍历 。 即逐层地从左到右访问所有节点。代码 class Solution {public ListListInteger levelOrder(TreeNode root) {//二叉树的层序遍历需要利用队列结构//队头元素出队时要将队头元素的左右结点入队//每一层第一个元素出队前队列的长度即为该层的元素个数ListListInteger ans new LinkedList();if(root null) return ans;DequeTreeNode queue new ArrayDeque();queue.offer(root);while (!queue.isEmpty()){ListInteger temp new LinkedList();int len queue.size();while (len0){TreeNode node queue.poll();temp.add(node.val);if(node.left ! null){queue.offer(node.left);}if(node.right ! null){queue.offer(node.right);}len--;}ans.add(temp);}return ans;} }2. 107【二叉树的层次遍历II】 题目 给你二叉树的根节点 root 返回其节点值 自底向上的层序遍历 。 即按从叶子节点所在层到根节点所在的层逐层从左向右遍历代码 class Solution {public ListListInteger levelOrderBottom(TreeNode root) {//将上一题的结果反转即可ListListInteger ans new LinkedList();if(root null) return ans;DequeTreeNode queue new ArrayDeque();queue.offer(root);while (!queue.isEmpty()){int len queue.size();ListInteger temp new LinkedList();while (len 0){TreeNode node queue.poll();temp.add(node.val);if(node.left ! null){queue.offer(node.left);}if(node.right ! null){queue.offer(node.right);}len--;}ans.add(temp);}Collections.reverse(ans);return ans;} }3. 199【二叉树的右视图】 题目 给定一个二叉树的 根节点 root想象自己站在它的右侧按照从顶部到底部的顺序返回从右侧所能看到的节点值。代码 class Solution {public ListInteger rightSideView(TreeNode root) {ListInteger ans new LinkedList();if(root null) return ans;DequeTreeNode queue new ArrayDeque();queue.offer(root);while(!queue.isEmpty()){int len queue.size();TreeNode node;while (len 0){node queue.poll();if(node.left ! null){queue.offer(node.left);}if(node.right ! null){queue.offer(node.right);}if(len 1){ans.add(node.val);}len--;}}return ans;} }4. 637【二叉树的层平均值】 题目 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 1 0 − 5 10^{-5} 10−5以内的答案可以被接受。代码 class Solution {public ListDouble averageOfLevels(TreeNode root) {ListDouble avg new LinkedList();DequeTreeNode queue new ArrayDeque();queue.offer(root);while(!queue.isEmpty()){int len queue.size();double sum 0;for (int i 0; i len; i) {TreeNode node queue.poll();sum node.val;if(node.left ! null){queue.offer(node.left);}if(node.right ! null){queue.offer(node.right);}}avg.add(sum/len);}return avg;} }5. 429【N叉树的层序遍历】 题目 给定一个 N 叉树返回其节点值的层序遍历。即从左到右逐层遍历。树的序列化输入是用层序遍历每组子节点都由 null 值分隔。代码 class Solution {public ListListInteger levelOrder(Node root) {ListListInteger ans new LinkedList();if(root null) return ans;DequeNode queue new ArrayDeque();queue.offer(root);while(!queue.isEmpty()){int len queue.size();ListInteger temp new LinkedList();for (int i 0; i len; i) {Node node queue.poll();temp.add(node.val);for (int j 0; j node.children.size(); j) {queue.offer(node.children.get(j));}}ans.add(temp);}return ans;} }6. 515【在每个树行中找最大值】 题目 给定一棵二叉树的根节点 root 请找出该二叉树中每一层的最大值。代码 class Solution {public ListInteger largestValues(TreeNode root) {ListInteger ans new LinkedList();if(root null) return ans;DequeTreeNode queue new ArrayDeque();queue.offer(root);while(!queue.isEmpty()){int len queue.size();int max queue.peek().val;while (len 0){TreeNode node queue.poll();if(node.left ! null){queue.offer(node.left);}if(node.right ! null){queue.offer(node.right);}max max node.val ? max : node.val;len--;}ans.add(max);}return ans;} }7. 116【填充每个节点的下一个右侧节点指针】 题目 给定一个完美二叉树其所有叶子节点都在同一层每个父节点都有两个子节点。二叉树定义如下 struct Node {int val;Node *left;Node *right;Node *next; }填充它的每个 next 指针让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点则将 next 指针设置为 NULL。初始状态下所有 next 指针都被设置为 NULL。 代码 class Solution {public Node connect(Node root) {if(root null)return null;DequeNode queue new ArrayDeque();queue.offer(root);while (!queue.isEmpty()){int len queue.size();for (int i 0; i len; i) {Node temp queue.poll();if(temp.left ! null){queue.offer(temp.left);}if(temp.right ! null){queue.offer(temp.right);}if(i len-1){temp.next null;}else {temp.next queue.peek();}}}return root;} }8. 117【填充每个节点的下一个右侧节点指针II】 题目 该题题目与上一题只差了一个完美二叉树但是代码是一样的这里为了节省空间就不再放一遍了。 9. 104【二叉树的最大深度】 题目 给定一个二叉树 root 返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。代码 class Solution {public int maxDepth(TreeNode root) {if(root null) return 0;DequeTreeNode queue new ArrayDeque();queue.offer(root);int height 0;while (!queue.isEmpty()){int len queue.size();for (int i 0; i len; i) {TreeNode temp queue.poll();if(temp.left ! null){queue.offer(temp.left);}if(temp.right ! null){queue.offer(temp.right);}}height;}return height;} }10. 111【二叉树的最小深度】 题目 给定一个二叉树找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明叶子节点是指没有子节点的节点。代码 class Solution {public int minDepth(TreeNode root) {//当遍历到最小深度时必有一个叶子结点if(root null) return 0;DequeTreeNode queue new ArrayDeque();queue.offer(root);int height 0;boolean isFlag false;while (!queue.isEmpty()){int len queue.size();height;for (int i 0; i len; i) {TreeNode temp queue.poll();if(temp.left null temp.right null){isFlag true;break;}if(temp.left ! null){queue.offer(temp.left);}if(temp.right ! null){queue.offer(temp.right);}}if(isFlag) return height;}return height;} }
http://www.zqtcl.cn/news/952932/

相关文章:

  • 太仓住房和城乡建设局网站seo网页推广
  • 网络公司 网站源码网页源代码修改了影响别人吗
  • 网站后台是怎样制作的app开发公司排行榜做软件的公司
  • 有专门做网站的公司吗西安分类信息seo公司
  • 重庆璧山网站制作公司哪家专业商城网站建设 优帮云
  • 双语网站建设费用安徽省芜湖建设定额网站
  • 常州市城乡建设局网站wordpress 阿里云cdn
  • 福州制作网站设计哪里比较好百度网址大全官方网站
  • 一般做美食网站的产品需求我想做个网站
  • 成品网站制作公司应用公园是免费的吗
  • 做毕业网站的流程网站建设价格一览表
  • 企业服务网站开发做网站怎样建立服务器
  • 电子商务他们的代表网站360免费wifi官网
  • 网站后端开发软件cc域名做门户网站
  • 保定设计网站超云建站
  • 建筑工程网官网入口优化网站关键词排名软件
  • 企业网站功能怎么设计wordpress文章图片轮播
  • 网站后台登陆验证码不对阳江房产网楼市数据
  • 营销型网站建设遨龙仙居住房和城乡建设规划局网站
  • 中国做视频网站有哪些淘宝做详情页代码网站
  • 网站开发一般多钱在网站设计公司上班好吗
  • 餐饮连锁企业网站建设方案北京软件研发公司
  • 外国网站架构新闻稿
  • 营销网站建设企划案例友情链接怎么添加
  • seo网站搜索优化目前好的推广平台
  • 快速搭建网站页面黄页88网免费发布信息
  • 做网站能赚吗网址大全查询ip地址
  • html5网站正在建设中商城网站系统
  • 室内设计网课北京网站优化前景
  • 北京 网站建设 知乎上海公司买新能源车