【数据结构与算法】十五 二叉树遍历 DFS 深度优先 递归算法
2016-05-01 14:19
691 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maguochao_Mark/article/details/51265302
【数据结构与算法】十五 二叉树遍历 DFS 深度优先 递归算法
结合上一篇的二叉树文章.
遍历即将树的所有结点访问且仅访问一次.
Depth-First-Search 深度优先
基于深度优先算法有三种
前序遍历:根节点->左子树->右子树
private void preorder(Node node){ if(null == node) return ; System.out.print(node.value); preorder(node.left); preorder(node.right); }
中序遍历:左子树->根节点->右子树
private void midorder(Node node){ if(null == node) return ; midorder(node.left); System.out.print(node.value); midorder(node.right); }
后序遍历:左子树->右子树->根节点
private void postorder(Node node){ if(null == node) return ; postorder(node.left); postorder(node.right); System.out.print(node.value); }
完整code
package com.cn.mark.algorithm.binarytree; public class BST <T extends Comparable<? super T>>{ private static class Node<T> { private T value ; private Integer position ; private Integer height ; private Node<T> left; private Node<T> right; public Node(T value , Integer position, Node<T> left, Node<T> right) { this.value = value; this.position = position ; this.height = 0; this.left = left; this.right = right; } } private int height(Node<T> t) { return t == null ? -1 : t.height; } private Node<T> root ; public void add(T value , Integer position){ root = add( value , position, root ); } private Node<T> add(T value , Integer position, Node<T> node){ if(node == null){ return new Node<T>(value,position , null ,null); } int comparaResult = value.compareTo(node.value); if(comparaResult > 0) node.right = add(value , position , node.right); else if (comparaResult < 0) node.left = add(value , position , node.left); else System.out.println("as same a value"); node.height = Math.max(height(node.left), height(node.right)) + 1; return node; } public Integer search(Node<T> node , T value){ if(node == null) return -1 ; int comparaResult = value.compareTo(node.value); if(comparaResult == 0) return node.position; else if(comparaResult > 0) return search(node.right, value); else if(comparaResult < 0) return search(node.left, value); else return -1; } private void preorder(Node<T> node){ if(null == node) return ; System.out.print(node.value); preorder(node.left); preorder(node.right); } private void midorder(Node<T> node){ if(null == node) return ; midorder(node.left); System.out.print(node.value); midorder(node.right); } private void postorder(Node<T> node){ if(null == node) return ; postorder(node.left); postorder(node.right); System.out.print(node.value); } public static void main(String[] args){ BST<Integer> bst = new BST<Integer>(); int[] array = {0,1,5,6,7,2,3,4,8,9}; for(int i=0;i<array.length;i++) bst.add(array[i],i);// System.out.println(bst.height(bst.root)); System.out.println(bst.search(bst.root, 8)); System.out.println(bst.search(bst.root, 0)); System.out.println(bst.search(bst.root, 22)); bst.preorder(bst.root); System.out.println(); bst.midorder(bst.root); System.out.println(); bst.postorder(bst.root); } }
相关文章推荐
- 【数据结构与算法】十八 二叉树遍历 DFS 深度优先 迭代算法
- 【数据结构与算法】十六 二叉树遍历 BFS 广度优先 递归算法
- 步步为营(十五)搜索(一)DFS 深度优先搜索
- 步步为营(十五)搜索(一)DFS 深度优先搜索
- 深度优先搜索的代码框架(DFS)
- 搜索------深度优先DFS-----模板2:例1 例2 例3 例4
- leetcode 394. Decode String 字符串解码 + DFS深度优先遍历求解
- 深度优先搜索DFS
- python遍历文件夹——深度优先(DFS)/广度优先(BFS)
- 第11周项目3-图遍历算法实现(深度优先DFS)
- 图的深度优先和广度优先算法(DFS递归与非递归)
- nyoj 部分和问题(深度优先搜索DFS)
- 深度优先搜索DFS
- leetcode 669. Trim a Binary Search Tree 修建二叉搜索树BST + 深度优先遍历DFS
- 经典迷宫问题DFS 深度优先
- leetcode 698. Partition to K Equal Sum Subsets K个相等子集 + 深度优先搜索DFS
- 数据结构与算法专题之图——图的遍历(深度优先遍历和广度优先遍历)
- BFS广度优先搜索 DFS深度优先搜索 回溯算法
- DFS深度优先遍历算法简单分析
- dfs深度优先搜索