【数据结构与算法】二叉树 遍历
来源:互联网 发布:天猫国际和淘宝全球购 编辑:程序博客网 时间:2024/05/23 00:47
public class TreeNode {int data;TreeNode left;TreeNode right;TreeNode(int data){this.data = data;}}
import java.util.LinkedList;import java.util.Queue;import java.util.Stack;public class Solution {/** * 首先,树的遍历要求先左后右,其次,这里的pre,in,post都是指根节点的顺序。 * 先序遍历,也就是先根遍历,用引用p遍历每一个节点,每一个循环就是对一个节点的处理,处理的逻辑是如果p不是空,那么 * 它代表了一个子树,因此先打印,然后把p压入栈,接着把p赋值为p.left,下一次循环遍历做字数。这里压栈的目的是到时候 * 可以退回来根据根节点找到右子树。如果p为空,那么说明上一个树没有左子树,那么需要出栈,把p赋值为右子树。 * 循环的条件是p不为空或者stack不为空。 */public void preOrderTraverse(TreeNode t){TreeNode p = t;Stack<TreeNode> stack = new Stack<>();while(p != null || !stack.isEmpty()){if (p != null) {System.out.print(p.data);stack.push(p);p = p.left;}else {p = stack.pop().right;}}}/** * 中根遍历,还是上面的思路,只是循环体的处理不同,如果p不空,那么需要先把p压栈,以便之后回来遍历根和右子树, * 赋值p为左子树,然后压栈p。如果为空,说明没有左子树,此时出栈,打印,然后把p赋值为右子树。 */public void inOrderTraverse(TreeNode t){TreeNode p = t;Stack<TreeNode> stack = new Stack<>();while(p != null || !stack.isEmpty()){if (p != null) {stack.push(p);p = p.left;}else {System.out.print(stack.peek().data);p = stack.pop().right;}}}public void preOrder(TreeNode t){if (t == null) {return;}System.out.print(t.data);preOrder(t.left);preOrder(t.right);}public void inOrder(TreeNode t){if (t == null) {return;}inOrder(t.left);System.out.print(t.data);inOrder(t.right);}public void postOrder(TreeNode t){if (t == null) {return;}postOrder(t.left);postOrder(t.right);System.out.print(t.data);}public void layerTraverse(TreeNode t){Queue<TreeNode> queue = new LinkedList<>();queue.add(t);while(!queue.isEmpty()){TreeNode node = queue.poll();if (node != null) {System.out.print(node.data);queue.add(node.left);queue.add(node.right);}}}public int deepth(TreeNode t){if (t==null) {return 0;}else {return Math.max(deepth(t.left), deepth(t.right)) + 1;}}}
0 0
- 数据结构与算法之二叉树遍历
- 【数据结构与算法】二叉树广度遍历
- 【数据结构与算法】二叉树的遍历
- 【数据结构与算法】二叉树 遍历
- [数据结构与算法]二叉树与二叉树遍历
- 【数据结构与算法】二叉树递归与非递归遍历
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- 【数据结构与算法】二叉树的层序遍历
- 【数据结构与算法】二叉树的层序遍历
- 【数据结构与算法】二叉树深度遍历(递归)
- 【数据结构与算法】二叉树深度遍历(非递归)
- 【数据结构与算法】二叉树的层序遍历
- 数据结构与算法简记:非递归遍历二叉树
- 数据结构与算法之二叉树+遍历+哈夫曼树
- 数据结构与算法笔记 lesson 20 二叉树遍历
- 【数据结构与算法】根据遍历结果构建二叉树
- Java数据结构与算法分析《十二》遍历二叉树
- 数据结构与算法(17)——二叉树遍历
- 《异类》
- 'Shader error in 'DX11/GreenScreenShader': Fragment program 'frag': sampler 'SampleType' has no matc
- Java应用基础:进阶篇 习题——单词长度
- [BZOJ 1878]HH的项链(树状数组+离线)
- 一个不错的shell 脚本入门教程
- 【数据结构与算法】二叉树 遍历
- std::mutex的用法
- iOS的三种动画
- switch-case_成绩等级查询系统
- POJ 2431 Expedition (优先队列
- Uva1149 Bin Packing
- QuickContactBadge(联系人快捷标识控件)的使用
- switch-case_月份英文单词查询系统
- Leetcode——142. Linked List Cycle II