【数据结构与算法】十五 二叉树遍历 DFS 深度优先 递归算法
来源:互联网 发布:android获取xml数据 编辑:程序博客网 时间:2024/05/22 06:19
【数据结构与算法】十五 二叉树遍历 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); }}
0 0
- 【数据结构与算法】十五 二叉树遍历 DFS 深度优先 递归算法
- 【数据结构与算法】十八 二叉树遍历 DFS 深度优先 迭代算法
- 【数据结构与算法】二叉树深度遍历(递归)
- 【数据结构与算法】二叉树深度遍历(非递归)
- 算法与数据结构(2) -- 二叉树深度优先遍历和广度优先遍历
- 二叉树深度优先遍历的非递归算法
- 【数据结构与算法】十六 二叉树遍历 BFS 广度优先 递归算法
- 二叉树深度优先遍历、广度优先遍历、非递归遍历算法
- 【数据结构与算法】二叉树递归与非递归遍历
- 二叉树深度优先(DFS)和广度优先(BFS)算法的非递归实现
- 树与二叉树的深度优先与广度优先算法(递归与非递归)
- 树与二叉树的深度优先与广度优先算法(递归与非递归)
- 深度优先遍历与广度优先遍历(c++二叉树算法实现)
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- 数据结构与算法简记:非递归遍历二叉树
- 二叉树的深度优先dfs遍历(前序、中序和后序;递归与非递归)
- DFS深度优先遍历算法简单分析
- 树的广度优先遍历与深度优先遍历算法
- Properties Editor 是一款properties文件编辑器。
- test editor
- C语言的特点总结
- Java面试题
- hdoj-1232-畅通工程
- 【数据结构与算法】十五 二叉树遍历 DFS 深度优先 递归算法
- 剑指offer(2) 字符串的替换
- NSArray排序简记
- Linux的一些总结
- Bug自动查找工具的安装与使用
- android 沉浸式状态栏的实现
- Watch OS开发基本知识的学习
- (prim算法题型一)求最小生成树的权值和、路径、边值的最小和最大值。
- 切片工具:把别家卫星图覆盖到百度地图上