一、核心思想
1、深度优先搜索
用栈做辅助,做回溯判断(搜索到哪一点就push,回溯就pop),直至初始点也回溯完。
2.广度优先搜索
利用队列的先进先出特点,每一轮都将当前节点的儿子们放进队列,一轮遍历结束时,当前层的儿子们已经放入队列,重复下去。
二、代码
/** * 树节点结构 */ class TreeNode { int data; TreeNode leftNode; TreeNode rightNode; public TreeNode() { } public TreeNode(int data) { this.data = data; } public TreeNode(TreeNode leftNode,TreeNode rightNode,int data) { this.leftNode = leftNode; this.rightNode= rightNode; this.data = data; } } public class Main { //广度优先遍历 public void BroadFirstSearch(TreeNode nodeHead) { if(nodeHead == null) return; Queue<TreeNode> queue = new LinkedList<>(); queue.add(nodeHead); while(!queue.isEmpty()) { TreeNode node = queue.poll(); System.out.print(node.data + " "); if(null != node.leftNode) { queue.add(node.leftNode); } if(null != node.rightNode) { queue.add(node.rightNode); } } } //深度优先遍历 public void depthFirstSearch(TreeNode nodeHead) { if(nodeHead == null) return; Stack<TreeNode> queue = new Stack<>(); queue.add(nodeHead); while(!queue.isEmpty()) { TreeNode node=queue.pop(); System.out.print(node.data + " "); if(node.rightNode != null) { queue.push(node.rightNode); } if(node.leftNode != null) { queue.push(node.leftNode); } } } }