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

有了网站开发app是不是更容易流程优化的七个步骤

有了网站开发app是不是更容易,流程优化的七个步骤,Zillah wordpress,网站建设 镇江java实现二叉树的前序、中序、后序遍历以及层级遍历 一、二叉树节点定义二、递归方式1.前序遍历2.中序遍历3.后序遍历 三、非递归方式1.前序遍历2.中序遍历3.后序遍历4.层级遍历5.分层打印 四、测试用例 一、二叉树节点定义 class TreeNode {int val;TreeNode left;TreeNode r…

java实现二叉树的前序、中序、后序遍历以及层级遍历

  • 一、二叉树节点定义
  • 二、递归方式
    • 1.前序遍历
    • 2.中序遍历
    • 3.后序遍历
  • 三、非递归方式
    • 1.前序遍历
    • 2.中序遍历
    • 3.后序遍历
    • 4.层级遍历
    • 5.分层打印
  • 四、测试用例

一、二叉树节点定义

class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}
}

二、递归方式

1.前序遍历

前序遍历(根-左-右)

public void preorderRecursive(TreeNode root) {if (root == null) {return;}// 访问根节点System.out.print(root.val + " ");// 递归遍历左子树preorderRecursive(root.left);// 递归遍历右子树preorderRecursive(root.right);
}

2.中序遍历

中序遍历(左-根-右)

public void inorderRecursive(TreeNode root) {if (root == null) {return;}// 递归遍历左子树inorderRecursive(root.left);// 访问根节点System.out.print(root.val + " ");// 递归遍历右子树inorderRecursive(root.right);
}

3.后序遍历

后序遍历(左-右-根)

public void postorderRecursive(TreeNode root) {if (root == null) {return;}// 递归遍历左子树postorderRecursive(root.left);// 递归遍历右子树postorderRecursive(root.right);// 访问根节点System.out.print(root.val + " ");
}

三、非递归方式

1.前序遍历

前序遍历(根-左-右)

public void preorderIterative(TreeNode root) {if (root == null) {return;}Stack<TreeNode> stack = new Stack<>();stack.push(root);while (!stack.isEmpty()) {TreeNode node = stack.pop();System.out.print(node.val + " ");// 先压入右节点,再压入左节点,保证左节点先出栈if (node.right != null) {stack.push(node.right);}if (node.left != null) {stack.push(node.left);}}
}

2.中序遍历

中序遍历(左-根-右)

public void inorderIterative(TreeNode root) {Stack<TreeNode> stack = new Stack<>();TreeNode curr = root;while (curr != null || !stack.isEmpty()) {// 一直向左走,把所有左节点压栈while (curr != null) {stack.push(curr);curr = curr.left;}curr = stack.pop();System.out.print(curr.val + " ");// 转向右子树curr = curr.right;}
}

3.后序遍历

后序遍历(左-右-根)

public void postorderIterative(TreeNode root) {if (root == null) {return;}Stack<TreeNode> stack = new Stack<>();// 用于反转顺序Stack<Integer> output = new Stack<>();stack.push(root);while (!stack.isEmpty()) {TreeNode node = stack.pop();output.push(node.val);// 注意这里先左后右,这样输出栈的顺序就是右-左-根// 反转后就是左-右-根if (node.left != null) {stack.push(node.left);}if (node.right != null) {stack.push(node.right);}}// 输出结果while (!output.isEmpty()) {System.out.print(output.pop() + " ");}
}

4.层级遍历

层级遍历(Level Order Traversal)也称为广度优先遍历(BFS),是按层次从上到下、从左到右访问二叉树节点的遍历方式。

public void levelOrderTraversal(TreeNode root) {if (root == null) {return;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {TreeNode node = queue.poll();System.out.print(node.val + " ");if (node.left != null) {queue.offer(node.left);}if (node.right != null) {queue.offer(node.right);}}
}

5.分层打印

分层打印的实现(按层次输出)

public void levelOrderWithLevels(TreeNode root) {if (root == null) {return;}Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);int levelCount = 0;while (!queue.isEmpty()) {int levelSize = queue.size();System.out.print("Level " + (levelCount++) + ": ");for (int i = 0; i < levelSize; i++) {TreeNode node = queue.poll();System.out.print(node.val + " ");if (node.left != null) {queue.offer(node.left);}if (node.right != null) {queue.offer(node.right);}}System.out.println();}
}

四、测试用例

public static void main(String[] args) {// 构建二叉树//       1//      / \//     2   3//    / \//   4   5TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);BinaryTreeTraversal traversal = new BinaryTreeTraversal();System.out.println("递归前序遍历:");traversal.preorderRecursive(root);System.out.println("\n非递归前序遍历:");traversal.preorderIterative(root);System.out.println("\n\n递归中序遍历:");traversal.inorderRecursive(root);System.out.println("\n非递归中序遍历:");traversal.inorderIterative(root);System.out.println("\n\n递归后序遍历:");traversal.postorderRecursive(root);System.out.println("\n非递归后序遍历:");traversal.postorderIterative(root);System.out.println("\n基本层级遍历:");traversal.levelOrderTraversal(root);System.out.println("\n\n分层打印层级遍历:");traversal.levelOrderWithLevels(root);
}

打印结果
result

http://www.dtcms.com/wzjs/393834.html

相关文章:

  • 商家自己做的商品信息查询网站网络营销课程作业
  • 网站建设 调研报告网站关键词怎么添加
  • 营销型网站建设大概多少钱百度搜索一下就知道
  • 国内做卷学习网站汕头seo按天付费
  • 建设一个电影网站需要多少钱游戏推广文案
  • mac os 做网站合肥网站推广公司
  • 个人做网站需要什么资料免费网站服务器
  • 普通银行卡可以做国外网站购物信用卡使用吗seo研究中心倒闭
  • 淘宝联盟链接的网站怎么做的厦门seo排名优化
  • 网络公司怎么做网站百度账号怎么注册
  • 荆州网站建设价格深圳信息公司做关键词
  • 网站建设与维护选择题长沙关键词自然排名
  • er图关于网站建设新闻发布的网站
  • 做视频课程网站郑州seo公司排名
  • 宁德市城乡建设局网站登封seo公司
  • 苹果手机免费做ppt模板下载网站有哪些比较有名的个人网站
  • 做视频网站 视频放在哪里百度免费资源网站
  • 标准营销型网站定做价格免费b站在线观看人数在哪里找到
  • 济南网站建设需要多少钱百度排行榜风云榜小说
  • 用阿里云搭建WordPress深圳推广优化公司
  • 家乡网站建设策划书日本比分预测
  • 深圳市外贸网站东莞seo建站优化工具
  • 网站建设与管理ppt课件百度云盘如何优化seo
  • 404页面模板谷歌外贸seo
  • 深圳网络推广收费标准短视频seo营销
  • 东盟建设投资有限公司网站seo网络推广培训班
  • 番禺网站建设番禺网络营销今日新闻事件
  • 禹州做网站bz3399西安百度竞价代运营
  • 桐乡住房和城乡规划建设局网站百度推广效果怎么样
  • 专业中山建网站公司百度广告一天多少钱