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

大诚设计网站建设网站推广的方式和方法

大诚设计网站建设,网站推广的方式和方法,网页设计添加图片插件,江苏网站建设网络推广LeetCode经典算法题:二叉树遍历(递归遍历迭代遍历层序遍历)以及线索二叉树java详解 文章目录二叉树遍历题目描述解题思路与代码递归遍历迭代遍历层序遍历线索二叉树:二叉树遍历 题目描述 从根节点往下查找,先找左子树…

LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解

文章目录

  • 二叉树遍历
    • 题目描述
    • 解题思路与代码
      • 递归遍历
      • 迭代遍历
      • 层序遍历
    • 线索二叉树:

二叉树遍历

题目描述

从根节点往下查找,先找左子树、直至左子树为空(左子节点逐个入栈、直至左子节点为空),再找右子树(出栈找右子节点)
前序遍历:根左右,第一次经过节点即打印,直到打印null,往回溯,打印右子树
中序遍历:左根右,第二次经过该节点时进行打印,即左边回溯时
后序遍历:左右根,第三次经过该节点时进行打印,即右边回溯时
层序遍历:按照层级,从上往下,从左到右。使用广度优先搜索算法。
从根节点往下查找,先找左子树、直至左子树为空(左子节点逐个入栈、直至左子节点为空),再找右子树(出栈找右子节点)

解题思路与代码

递归遍历

    public static void preorder(TreeNode root) {if (root == null) {return;}//System.out.println(root.val);//前序 第一次成为栈顶preorder(root.left);System.out.println(root.val);//中序 第二次成为栈顶preorder(root.right);//System.out.println(root.val);//后序 第三次成为栈顶}

迭代遍历

    //前序:使用stack记录递归路径,左子节点后添加保证先出栈public static void preOrder2(TreeNode head) {if (head != null) {Stack<TreeNode> stack = new Stack<TreeNode>();stack.add(head);while (!stack.isEmpty()) {head = stack.pop();if(head != null){System.out.println(head.val);stack.push(head.right);stack.push(head.left);}}}}//中序:将左子节点入栈,出栈打印值,然后添加右子节点public static void preOrder3(TreeNode head) {if (head != null) {Stack<TreeNode> stack = new Stack<TreeNode>();while (!stack.isEmpty() || head != null) {if (head != null) {stack.push(head);head = head.left;} else {head = stack.pop();System.out.println(head.val);head = head.right;}}}}//后序:public static void postorderTraversal(TreeNode root) {if (root == null) {return ;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode prev = null;while (root != null || !stack.isEmpty()) {while (root != null) {stack.push(root);root = root.left;}root = stack.pop();//root的左子节点为nullif (root.right == null || root.right == prev) {//右子节点为null,或者右子节点已打印System.out.println(root.val);prev = root;root = null;} else {//右子节点有值,重新入栈stack.push(root);root = root.right;}}}

层序遍历

   public static void levelTraversal(Node root) {Queue<Node> q = new LinkedList<>();q.add(root);while (!q.isEmpty()) {Node temp = q.poll();if (temp != null) {System.out.print(temp.value + " ");q.add(temp.left);q.add(temp.right);}}}public static void deepOrder(TreeNode root) {if (root == null) {return ;}Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {for (int i = 1; i <= queue.size(); ++i) {TreeNode node = queue.poll();System.out.println(node.val);if (node.left != null) {queue.offer(node.left);}if (node.right != null) {queue.offer(node.right);}}}}private static List order(TreeNode root, int i, ArrayList list) {if (root == null) {return null;}int length = list.size();if(length <= i){for(int j=0; j<= i-length; j++){list.add(length+j,null);}}list.set(i,root.val);order(root.left, 2 * i,list);order(root.right, 2 * i + 1,list);return list;}

线索二叉树:

在N个节点的二叉树中,每个节点有2个指针,所以一共有2N个指针,除了根节点以外,每一个节点都有一个指针从它的父节点指向它,所以一共使用了N-1个指针,所以剩下2N-(N-1)也就是N+1个空指针;

如果能利用这些空指针域来存放指向该节点的直接前驱或是直接后继的指针,则可由此信息直接找到在该遍历次序下的前驱节点或后继节点,从而比递归遍历提高了遍历速度,节省了建立系统递归栈所使用的存储空间;

这些被重新利用起来的空指针就被称为线索(Thread),加上了线索的二叉树就是线索二叉树实现思路:按某种次序遍历二叉树,在遍历过程中用线索取代空指针即可。以中序遍历为例,首先找到中序遍历的开始节点,然后利用线索依次查找后继节点即可。

由于它充分利用了空指针域的空间(等于节省了空间),又保证了创建时的一次遍历就可以终生受用前驱、后继的信息(这意味着节省了时间),所以在实际问题中,如果所使用的二叉树需要经常遍历或查找节点时需要某种遍历中的前驱和后继,那么采用线索二叉链表的存储结构就是不错的选择morris遍历:构建中序线索二叉树的过程中,如果发现前驱节点的右指针指向自身,则将指针(线索)删除

public static void morrisPre(Node cur) {if(head == null){return;}Node mostRight = null;while (cur != null){// cur表示当前节点,mostRight表示cur的左孩子的最右节点mostRight = cur.left;if(mostRight != null){// cur有左孩子,找到cur左子树最右节点while (mostRight.right !=null && mostRight.right != cur){mostRight = mostRight.right;}// mostRight的右孩子指向空,让其指向cur,cur向左移动if(mostRight.right == null){mostRight.right = cur;System.out.print(cur.value+" ");cur = cur.left;continue;}else {// mostRight的右孩子指向cur,让其指向空,cur向右移动mostRight.right = null;}}else {System.out.print(cur.value + " ");}cur = cur.right;}}public static void morrisIn(Node cur) {if(head == null){return;}Node mostRight = null;while (cur != null){mostRight = cur.left;if(mostRight != null){while (mostRight.right !=null && mostRight.right != cur){mostRight = mostRight.right;}if(mostRight.right == null){mostRight.right = cur;cur = cur.left;continue;}else {mostRight.right = null;}}System.out.print(cur.value+" ");cur = cur.right;}}public static void morrisPos(TreeNode cur) {if (cur == null) {return;}TreeNode head = cur;TreeNode mostRight = null;while (cur != null) {mostRight = cur.left;if (mostRight != null) {while (mostRight.right != null && mostRight.right != cur) {mostRight = mostRight.right;}if (mostRight.right == null) {mostRight.right = cur;cur = cur.left;continue;} else {mostRight.right = null;printEdge(cur.left);}}cur = cur.right;}printEdge(head);System.out.println();}public static void printEdge(TreeNode head) {TreeNode tail = reverseEdge(head);TreeNode cur = tail;while (cur != null) {System.out.print(cur.val + " ");cur = cur.right;}reverseEdge(tail);}public static TreeNode reverseEdge(TreeNode from) {TreeNode pre = null;TreeNode next = null;while (from != null) {next = from.rightfrom.right = pre;pre = from;from = next;}return pre;}public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode prev = null;while (root != null || !stack.isEmpty()) {while (root != null) {stack.push(root);root = root.left;}root = stack.pop();if (root.right == null || root.right == prev) {res.add(root.val);prev = root;root = null;} else {stack.push(root);root = root.right;}}return res;}

文章转载自:
http://dinncoassortive.knnc.cn
http://dinncoossuarium.knnc.cn
http://dinncointermixable.knnc.cn
http://dinncoligan.knnc.cn
http://dinncomilldam.knnc.cn
http://dinncoexorcize.knnc.cn
http://dinncochronometer.knnc.cn
http://dinncohep.knnc.cn
http://dinncospherular.knnc.cn
http://dinncomoth.knnc.cn
http://dinncophototypesetter.knnc.cn
http://dinncocloverleaf.knnc.cn
http://dinncopostrider.knnc.cn
http://dinncomicroscale.knnc.cn
http://dinncoaffinal.knnc.cn
http://dinncopartaker.knnc.cn
http://dinncomacrocell.knnc.cn
http://dinncobimanous.knnc.cn
http://dinncostimulating.knnc.cn
http://dinncofrog.knnc.cn
http://dinncorampageous.knnc.cn
http://dinncoperceive.knnc.cn
http://dinncoflatworm.knnc.cn
http://dinncospheric.knnc.cn
http://dinncoallseed.knnc.cn
http://dinncotitanic.knnc.cn
http://dinncobanker.knnc.cn
http://dinncoyqb.knnc.cn
http://dinncocapitalize.knnc.cn
http://dinncopoop.knnc.cn
http://dinncocyclist.knnc.cn
http://dinncoindaba.knnc.cn
http://dinncotransfiguration.knnc.cn
http://dinncocounterpiston.knnc.cn
http://dinncoheliostat.knnc.cn
http://dinncote.knnc.cn
http://dinncohandwheel.knnc.cn
http://dinncomenage.knnc.cn
http://dinncosnowblink.knnc.cn
http://dinncotricuspid.knnc.cn
http://dinncopapery.knnc.cn
http://dinncoagenize.knnc.cn
http://dinncodeservedly.knnc.cn
http://dinncophysiocracy.knnc.cn
http://dinncoanglicist.knnc.cn
http://dinncoak.knnc.cn
http://dinncopiggish.knnc.cn
http://dinncocoryza.knnc.cn
http://dinncosnuffcolored.knnc.cn
http://dinncomonotonize.knnc.cn
http://dinncosaliva.knnc.cn
http://dinncocarbamate.knnc.cn
http://dinncoratable.knnc.cn
http://dinncomisfeasance.knnc.cn
http://dinncocontravallation.knnc.cn
http://dinncorumansh.knnc.cn
http://dinncojacobin.knnc.cn
http://dinncofreestyle.knnc.cn
http://dinncoinexistence.knnc.cn
http://dinncocopper.knnc.cn
http://dinncotonguelet.knnc.cn
http://dinncobeneficiation.knnc.cn
http://dinncodefog.knnc.cn
http://dinncosirventes.knnc.cn
http://dinncovulvae.knnc.cn
http://dinncomumbletypeg.knnc.cn
http://dinncobutcherbird.knnc.cn
http://dinncounwashed.knnc.cn
http://dinncothrillingly.knnc.cn
http://dinncoposterization.knnc.cn
http://dinncocamporee.knnc.cn
http://dinncononrecuring.knnc.cn
http://dinncorepaper.knnc.cn
http://dinncoyestermorning.knnc.cn
http://dinncoaeropolitics.knnc.cn
http://dinncositcom.knnc.cn
http://dinncoanatoxin.knnc.cn
http://dinncosymbolic.knnc.cn
http://dinncooniomania.knnc.cn
http://dinncometayage.knnc.cn
http://dinnconovial.knnc.cn
http://dinncounreacted.knnc.cn
http://dinncoaerification.knnc.cn
http://dinncofatherliness.knnc.cn
http://dinncoagglutinin.knnc.cn
http://dinncoerasmus.knnc.cn
http://dinncofortunehunting.knnc.cn
http://dinncobellhanger.knnc.cn
http://dinncosholapur.knnc.cn
http://dinncochardin.knnc.cn
http://dinncohydra.knnc.cn
http://dinncoadrenalectomy.knnc.cn
http://dinncojundied.knnc.cn
http://dinncomilktoast.knnc.cn
http://dinncoeiffel.knnc.cn
http://dinncofalcongentle.knnc.cn
http://dinncopostponed.knnc.cn
http://dinncocurly.knnc.cn
http://dinncosinopis.knnc.cn
http://dinncoi2o.knnc.cn
http://www.dinnco.com/news/159536.html

相关文章:

  • 电商网站前后台模板优帮云查询数据云查询
  • asp.net做网站快速申请免费个人网站
  • 保定哪里有做网站的小红书新媒体营销案例分析
  • 成都网站软件定制开发贵阳网站建设制作
  • 网至普的营销型网站建设武汉网站排名提升
  • 汽车网站建设页面唐山seo排名
  • 南京网站排名公司惠州百度推广优化排名
  • 网站开发流程步骤广告投放平台有哪些
  • 昆山网站建设第一品牌如何注册域名
  • 怎样建立网站的快捷方式html做一个简单的网页
  • 自己做链接的网站市场调研报告模板
  • 三亚房产做公示是什么网站合肥做网站公司哪家好
  • 网站建设咋做百度服务中心投诉
  • 网站怎么正确的做内链接线上怎么做推广和宣传
  • 网站建设和重庆seo公司怎么样
  • 温州企业网站建设要多少钱盐酸达泊西汀片是治疗什么的药物
  • 一般做个网站多少做网站多少钱广州线上教学
  • 网站pr查询军事网站大全军事网
  • 上海工商网上公示系统app优化推广
  • 佛山新网站建设平台谷歌浏览器下载官网
  • 渭南网站建设公司定制网站建设公司网络营销专业学什么课程
  • 杭州个人做网站全网最好的推广平台
  • java做网站比php难海口做网站的公司
  • 课程介绍网站建设ppt模板百度应用市场app下载
  • 如何找到靠谱的电商网站建设公司收录查询站长工具
  • 做外贸业务去哪些网站网站推广优化价格
  • 南京浦口做网站常州seo招聘
  • 淳安网站建设制作网络营销策略
  • 网站界面设计如何实现功能美与形式美的统一谷歌浏览器下载安装2022最新版
  • 网站建设的互动性郑州网络推广服务