算法-二叉树遍历(递归和非递归)
来源:互联网 发布:三国志9最新优化伴侣 编辑:程序博客网 时间:2024/05/16 04:07
import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;import java.util.Scanner;import java.util.Stack;/** * Created by mifeng on 8/8/17. */class Node { public String data; public Node left; public Node right;}class BiTree { Node root; public BiTree(){ this.root = null; }}public class TreeApp { /** * 先序递归建立二叉树 * @param node * @return */ public static Node create(Node node){ Scanner in = new Scanner(System.in); String value = in.next(); if("#".equals(value) ){ node = null; }else{ node = new Node(); node.data = value; node.left = create(node.left); node.right = create(node.right); } return node; } /** * 先序遍历二叉树-递归形式 * @param root */ public static void preOrderVisitByRecursive(Node root){ if(root == null){ return; }else{ System.out.print(root.data); preOrderVisitByRecursive(root.left); preOrderVisitByRecursive(root.right); } } //先序遍历二叉树-非递归 public static void preOrderVisit(Node root){ if(root == null){ return; }else{// Stack<String> stack = new Stack<String>();// stack.push(root.data);// System.out.println(stack.pop()); Stack<Node> stack = new Stack<Node>(); stack.push(root);// System.out.println(stack.pop()); while (stack.size()!=0){// Node currentNode = root;// //stack.push(currentNode.data);// if(root.right!=null)// stack.push(root.right.data);// if(root.left!=null)// stack.push(root.left.data);// System.out.println(stack.pop());// //root = root.right; Node currentNode = stack.pop(); System.out.print(currentNode.data); //stack.push(currentNode.data);// if(root.right!=null)// stack.push(root.right);// if(root.left!=null)// stack.push(root.left);// System.out.println(stack.pop()); if(currentNode.right!=null) stack.push(currentNode.right); if(currentNode.left!=null) stack.push(currentNode.left); //System.out.println(stack.pop()); }// while(stack.size()!=0){// stack.pop();// }// Stack<Node> stack = new Stack<Node>();// stack.push(root); } } public static void preOrderVisit2(Node root){ Stack<String> stack = new Stack<String>(); if(root == null){ return; }else{ stack.push(root.data); while(true){ System.out.println(root.data); if(root.right!=null) stack.push(root.right.data); if(root.left!=null) stack.push(root.left.data); String data = stack.pop(); System.out.println(data); } } } //中序遍历-递归 public static void InOrderVisitByRecursive(Node root){ if(root == null){ return; } InOrderVisitByRecursive(root.left); System.out.print(root.data); InOrderVisitByRecursive(root.right); } //中序遍历-非递归 public static void InOrderVisit(Node root){ Stack<String> stack = new Stack<String>(); if(root!=null){ stack.push(root.data); while(root!=null){ root = root.left; } } } public static void InorderVisit2(Node root){ Stack<Node> stack = new Stack<Node>(); if(root!=null){ stack.push(root); while(root!=null){ stack.push(root); root = root.left; } Node currentNode = stack.pop(); System.out.print(currentNode.data); root = currentNode.right; System.out.println(currentNode.data); } } public static void InOrderVisit3(Node root){ Stack<Node> stack = new Stack<Node>(); if(root!=null){ //stack.push(root); while(!stack.isEmpty()||root!=null){ if(root!=null){ stack.push(root); root = root.left; }else{ Node currentNode = stack.pop(); System.out.print(currentNode.data); root = currentNode.right; } }// Node currentNode = stack.pop();// System.out.print(currentNode.data);// root = currentNode.right;// System.out.println(currentNode.data); } } //层次序列化二叉树 public static void visitByLevel(Node head){ Queue<Node> queue = new LinkedList<Node>(); if(head == null){ return ; } queue.offer(head); while(!queue.isEmpty()){ Node currNode = queue.poll(); System.out.println(currNode.data); if(currNode.left!=null) queue.offer(currNode.left); if(currNode.right!=null) queue.offer(currNode.right); } //return ""; } public static void main(String[] args){ BiTree tree = new BiTree(); tree.root = create(tree.root); //System.out.println(tree.root.data); //System.out.println(tree.root.left.data); System.out.println("先序遍历二叉树-递归"); preOrderVisitByRecursive(tree.root); System.out.println("先序遍历二叉树-非递归"); preOrderVisit(tree.root); System.out.println("中序遍历二叉树-递归"); InOrderVisitByRecursive(tree.root); System.out.println("中序遍历二叉树-非递归"); InOrderVisit3(tree.root); System.out.println("层次遍历:"); visitByLevel(tree.root); //List<String> list = new ArrayList<String>(new ArrayList<String>()); }}
阅读全文
0 0
- 二叉树遍历(递归算法和非递归算法)
- 二叉树的遍历算法(递归和非递归)
- 算法-二叉树遍历(递归和非递归)
- 遍历二叉树的递归和非递归算法
- 遍历二叉树-递归和非递归算法
- 二叉树递归和非递归遍历算法
- 二叉树遍历递归和非递归算法总结
- 遍历二叉树-递归和非递归算法
- 二叉树遍历的递归和非递归算法
- 二叉树的遍历-递归和非递归算法
- 二叉树的递归和非递归遍历算法
- 算法 二叉树遍历 递归和非递归
- 二叉树的递归和非递归的遍历算法
- 二叉树遍历(非递归算法)
- 二叉树遍历算法(非递归)
- 递归 和 非递归 遍历二叉树
- 递归和非递归遍历二叉树
- 递归和非递归遍历二叉树
- tensorflow 卷积神经网络 Inception-v3模型 迁移学习
- Angular2 组件样式及host
- 特征分解、奇异值分解几何意义
- 广西 2017 邀请赛 Duizi and Shunzi
- Add One Row to Tree
- 算法-二叉树遍历(递归和非递归)
- 数据结构排序
- 算法-01背包1
- 算法-01背包2
- 快速排序之分割数组
- ros_comm
- 算法学习-Bucket排序
- SQLServer--存储过程的分类
- 算法-求Factorial数列