前序遍历(递归、非递归)、层序遍历(递归、非递归)
生活随笔
收集整理的這篇文章主要介紹了
前序遍历(递归、非递归)、层序遍历(递归、非递归)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
遞歸:
1 package 劍指offer.前序遍歷; 2 3 import java.util.ArrayList; 4 5 /** 6 * Created by nick on 2018/10/6. 7 */ 8 public class Solution { 9 ArrayList<Integer> res=new ArrayList<Integer>(); 10 public void preNode(TreeNode root){ 11 if(root==null) 12 return; 13 res.add(root.val); 14 preNode(root.left); 15 preNode(root.right); 16 } 17 18 } 19 class TreeNode { 20 int val = 0; 21 TreeNode left = null; 22 TreeNode right = null; 23 24 public TreeNode(int val) { 25 this.val = val; 26 27 } 28 }非遞歸:
1 package 劍指offer.前序遍歷; 2 3 import java.util.ArrayList; 4 import java.util.Stack; 5 6 /** 7 * Created by nick on 2018/10/6. 8 */ 9 public class Solution1 { 10 ArrayList<Integer> res=new ArrayList<Integer>(); 11 public ArrayList<Integer> preNode(TreeNode root){ 12 Stack<TreeNode> temp=new Stack<TreeNode>(); 13 if(root==null) 14 return res; 15 temp.push(root); 16 while (!temp.isEmpty()){ 17 TreeNode t=temp.pop(); 18 res.add(t.val); 19 if(t.right!=null) 20 temp.push(root.right); 21 if(t.left!=null) 22 temp.push(root.left); 23 24 } 25 return res; 26 } 27 28 public static void main(String[] args) { 29 TreeNode root=new TreeNode(1); 30 root.left=new TreeNode(2); 31 root.right=new TreeNode(3); 32 33 System.out.println(new Solution1().preNode(root)); 34 } 35 }?層序遍歷:
/** 層序遍歷* 遞歸*/public void levelOrder(BinaryNode<AnyType> Node) {if (Node == null) {return;}int depth = depth(Node);for (int i = 1; i <= depth; i++) {levelOrder(Node, i);}}private void levelOrder(BinaryNode<AnyType> Node, int level) {if (Node == null || level < 1) {return;}if (level == 1) {System.out.print(Node.element + " ");return;}// 左子樹levelOrder(Node.left, level - 1);//直到第level層,再進行打印// 右子樹levelOrder(Node.right, level - 1);}public int depth(BinaryNode<AnyType> Node) {if (Node == null) {return 0;}int l = depth(Node.left);int r = depth(Node.right);if (l > r) {return l + 1;} else {return r + 1;}}非遞歸算法:
//使用隊列public static void levelTraversal2(TreeNode root){ArrayDeque<TreeNode> queue = new ArrayDeque<>();queue.add(root);while(!queue.isEmpty()){TreeNode temp = queue.poll();System.out.print(temp.val);if(temp.left != null){queue.offer(temp.left);}if(temp.right != null){queue.offer(temp.right);}}} }?
轉載于:https://www.cnblogs.com/nickup/p/9746993.html
總結
以上是生活随笔為你收集整理的前序遍历(递归、非递归)、层序遍历(递归、非递归)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringCloud组件:Eureka
- 下一篇: 远程桌面连接出现身份验证错误。 要求的函