二叉树遍历
来源:互联网 发布:angularjs 读取json 编辑:程序博客网 时间:2024/06/07 09:26
二叉树遍历
二叉树定义:
class TreeNode{ int val;//结点的值 TreeNode left;//左结点 TreeNode right;//右结点 public TreeNode(int val){ this.val = val; } }
前序遍历
前序遍历是先打印根结点值,再遍历左子树和右子树。
两种实现:
1. 递归实现,代码如下:
public static void preOrderTree(TreeNode root){ if(root == null) return; System.out.print(root.val+" "); preOrderTree(root.left); preOrderTree(root.right);}
2. 非递归实现,代码如下:
public static void preOrderTree2(TreeNode root){ if(root == null) return; Stack<TreeNode> stack = new Stack<>(); while(root != null || !stack.isEmpty()){ while(root != null ){ System.out.print(root.val+" "); stack.push(root); root = root.left; } if(!stack.isEmpty()){ root = stack.pop(); root = root.right; } } }
测试:
public static void main(String[] args) { TreeNode root = new TreeNode(8); TreeNode node1 = new TreeNode(6); TreeNode node2 = new TreeNode(10); TreeNode node3 = new TreeNode(5); TreeNode node4 = new TreeNode(7); TreeNode node5 = new TreeNode(9); TreeNode node6 = new TreeNode(11); root.left = node1; root.right = node2; node1.left = node3; node1.right = node4; node2.left = node5; node2.right = node6;// preOrderTree(root); preOrderTree2(root); }
中序遍历
中序遍历是先遍历左子树,再遍历根结点和右子树。
两种实现:
1. 递归实现,代码如下:
public static void inOrderPrint(TreeNode root){ if(root == null) return; inOrderPrint(root.left); System.out.print(root.val+" "); inOrderPrint(root.right); }
2. 非递归实现,代码如下:
public static void inOrderPrint2(TreeNode root){ if(root == null) return; Stack<TreeNode> stack = new Stack<>(); while(root != null || !stack.isEmpty()){ while(root != null){ stack.push(root); root = root.left; } if(!stack.isEmpty()){ root = stack.pop(); System.out.println(root.val); root = root.right; } } }
后序遍历
后序遍历是先遍历左右子树,再遍历根结点。
代码实现:
public static void afterOrderTree(TreeNode root){ if(root == null) return; afterOrderTree(root.left); afterOrderTree(root.right); System.out.print(root.val+" "); }
阅读全文
0 1
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 查找--遍历二叉树
- 遍历二叉树
- 二叉树遍历规则
- 二叉树的遍历
- 二叉树遍历
- 遍历二叉树
- 二叉树遍历问题
- 二叉树遍历
- 二叉树遍历(zz)
- 二叉树的遍历
- Java反射三 动态创建数组
- nio 读写文件
- something
- hadoop streaming的job中出现IOError: [Errno 32] Broken pipe
- nio 编码解码
- 二叉树遍历
- 桶排序的数组实现和链表实现
- java反射 ClassLoader 和 Class.forName() 的区别
- freetype的lcd多行显示代码分析
- Informatica 学习心得1: Defining a Link Condition
- Apache Kudu 1.4.0 中文文档
- 财富自由之路1
- TableView下拉刷新崩溃
- sql server 中用sql实现两个表之间的inert/delete/update