图
(一)图是一种多对多的数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点。
(二)图的表示方式有两种:1.二维数组(邻接矩阵);2.链表(邻接表)


(三)图的遍历:



(四)树的深度优先遍历代码:
1.非递归
1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 7 public TreeNode(int val) { 8 this.val = val; 9 10 } 11 12 } 13 */ 14 15 public class Solution { 16 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { 17 ArrayList<Integer> lists=new ArrayList<Integer>(); 18 if(root==null) 19 return lists; 20 Stack<TreeNode> stack=new Stack<TreeNode>(); 21 stack.push(root); 22 while(!stack.isEmpty()){ 23 TreeNode tree=stack.pop(); 24 //先往栈中压入右节点,再压左节点,这样出栈就是先左节点后右节点了。 25 if(tree.right!=null) 26 stack.push(tree.right); 27 if(tree.left!=null) 28 stack.push(tree.left); 29 lists.add(tree.val); 30 } 31 return lists; 32 } 33 }
2.递归
1 public void depthOrderTraversalWithRecursive() 2 { 3 depthTraversal(root); 4 } 5 6 private void depthTraversal(TreeNode tn) 7 { 8 if (tn!=null) 9 { 10 System.out.print(tn.value+" "); 11 depthTraversal(tn.left); 12 depthTraversal(tn.right); 13 } 14 }
(五)树的广度优先遍历代码
1 public class Solution { 2 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { 3 ArrayList<Integer> lists=new ArrayList<Integer>(); 4 if(root==null) 5 return lists; 6 Queue<TreeNode> queue=new LinkedList<TreeNode>(); 7 queue.offer(root); 8 while(!queue.isEmpty()){ 9 TreeNode tree=queue.poll(); 10 if(tree.left!=null) 11 queue.offer(tree.left); 12 if(tree.right!=null) 13 queue.offer(tree.right); 14 lists.add(tree.val); 15 } 16 return lists; 17 } 18 }
浙公网安备 33010602011771号