【知识点】树的遍历
来源:互联网 发布:致远oa数据库删除协同 编辑:程序博客网 时间:2024/06/06 12:35
【树的定义】
public class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(int x){val=x;}}
【前序遍历】
递归:
public void preOrder(TreeNodebiTree){System.out.printf(biTree.val+"");TreeNode leftTree=biTree.left;if(leftTree!=null){preOrder(leftTree);}TreeNode rightTree=biTree.right;if(rightTree!=null){preOrder(rightTree);}}
非递归:用栈实现
public void preOrder(TreeNodebiTree){Stack<TreeNode>stack=newStack<TreeNode>();while(biTree!=null||!stack.isEmpty()){while(node!=null){ System.out.print(biTree.value+","); stack.push(biTree); biTree=biTree.left; } if(!stack.isEmpty()){ biTree=stack.pop(); biTree=biTree.right; }}}
递归:
public static void inOrderTraversal(TreeNode node){if(node == null){return;}else{inOrderTraversal(node.leftChild);System.out.println(node.data);inOrderTRaversal(node.rightChild);}}
非递归:leetcode中有问到哦~
public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res= new ArrayList<Integer>();while(root==null) return res;Stack<TreeNode> stack= new Stack<TreeNode>();while(root!=null||!stack.isEmpty()){while(root!=null){stack.push(root);root=root.left;}if(!stack.isEmpty()){root=stack.pop();res.add(root.val);root=root.right;}}return res; }
【后序遍历】
递归:
public void postOrder(TreeNodebiTree){TreeNode leftTree=biTree.left;if(leftTree!=null){postOrder(leftTree);}TreeNoderightTree=biTree.right;if(rightTree!=null){postOrder(rightTree);}System.out.printf(biTree.val+"");}
非递归:
首先要搞清楚先序、中序、后续的非递归算法共同之处:用栈来保存先前走过的路径,以便可以在访问完子树后,可以利用栈中的信息,回退到当前节点的双亲节点,进行下一步操作。
后续遍历的非递归算法是三种顺序中最复杂的,原因在于,后续遍历是先访问左、右子树,再访问根节点,而在非递归算法中,利用栈回退到时,并不知道是从左子树回退到根节点,还是从右子树回退到根节点,如果从左子树回退到根节点,此时就应该去访问右子树,而如果从右子树回退到根节点,此时就应该访问根节点。所以相比前序和后续,必须得在压栈时添加信息,以便在退栈时可以知道是从左子树返回,还是从右子树返回进而决定下一步的操作。
0 0
- 【知识点】树的遍历
- C++基础知识点遗忘二字符与树的遍历节点判断
- JAVA 知识点(for-each)遍历的用法)
- C小知识点 : 数组和指针遍历的效率
- 数组对象Jquery真的不难~第五回 JQ中的遍历(遍历中的性能知识点)
- Jquery真的不难~第五回 JQ中的遍历(遍历中的性能知识点)
- 树的基本知识点
- 有关树的知识点
- 树的知识点整理
- 二叉树的知识点
- 树的知识点总结
- 二叉树的遍历(层遍历和深度遍历)
- 二叉树的前序中序后序遍历,非递归遍历 层次遍历
- 二叉树的先中后序遍历,递归遍历,非递归遍历
- 二叉树遍历-----前序后序迭代遍历的新思路
- 二叉树的遍历-按层次遍历
- 二叉树的遍历(递归遍历)
- 二叉树的遍历-层次遍历
- mysql的使用——linux上的安装步骤
- mysql的闪退问题
- ios UILable和UITextField详细讲解
- 约瑟夫环问题
- helloworld模块
- 【知识点】树的遍历
- 编程的人,需要学会总结自己,看到自己的短板和优点
- performSelectorOnMainThread
- Android 输入系统架构 笔记3
- 关于vx的启动设置
- 我眼中的相对论
- 第十四周项目二 带姓名的成绩单
- 股票
- 高效使用你的Xcode