Java递归方法遍历二叉树的代码

将内容过程中经常用的内容做个记录,如下内容内容是关于Java递归方法遍历二叉树的内容。

package com.wzs;

public class TestBinaryTree {
public static void main(String[] args) {
Node<String> g = new Node<String>("G", null, null);
Node<String> e = new Node<String>("E", null, null);
Node<String> f = new Node<String>("F", null, null);
Node<String> d = new Node<String>("D", null, g);
Node<String> b = new Node<String>("B", d, e);
Node<String> c = new Node<String>("C", null, f);
Node<String> a = new Node<String>("A", b, c);

System.out.println("生成的二叉树:");
System.out.println(" A");
System.out.println(" | ");
System.out.println(" |---------|");
System.out.println(" B C");
System.out.println(" | |");
System.out.println(" |---------| -----|");
System.out.println(" D E F");
System.out.println(" |");
System.out.println(" ----|");
System.out.println(" G");

System.out.println("二叉树深度:" + BinaryTree.getDepth(a));

System.out.print("前序遍历:");
BinaryTree.priorderTraversal(a);
System.out.println();

System.out.print("中序遍历:");
BinaryTree.inorderTraversal(a);
System.out.println();

System.out.print("后序遍历:");
BinaryTree.postorderTraversal(a);
System.out.println();
}
}

class BinaryTree {
static <T> void priorderTraversal(Node<T> node) {
if (node != null) {
visitNode(node);
priorderTraversal(node.getLeftChild());
priorderTraversal(node.getRightChild());
}
}

static <T> void inorderTraversal(Node<T> node) {
if (node != null) {
inorderTraversal(node.getLeftChild());
visitNode(node);
inorderTraversal(node.getRightChild());
}
}

static <T> void postorderTraversal(Node<T> node) {
if (node != null) {
postorderTraversal(node.getLeftChild());
postorderTraversal(node.getRightChild());
visitNode(node);
}
}

static <T> int getDepth(Node<T> node) {
if (node == null) {
return 0;
}
int leftDepth = 0;
int rightDepth = 0;
leftDepth = getDepth(node.getLeftChild());
rightDepth = getDepth(node.getRightChild());
return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}

static <T> void visitNode(Node<T> node) {
System.out.print(node.getKey() + " ");
}
}

class Node<T> {
private T key;
private Node<T> leftChild;
private Node<T> rightChild;

public Node() {

}

public Node(T key, Node<T> leftChild, Node<T> rightChild) {
super();
this.key = key;
this.leftChild = leftChild;
this.rightChild = rightChild;
}

public T getKey() {
return key;
}

public void setKey(T key) {
this.key = key;
}

public Node<T> getLeftChild() {
return leftChild;
}

public void setLeftChild(Node<T> leftChild) {
this.leftChild = leftChild;
}

public Node<T> getRightChild() {
return rightChild;
}

public void setRightChild(Node<T> rightChild) {
this.rightChild = rightChild;
}

}

输出结果生成的二叉树:A||---------|BC|||---------|-----|DEF|----|G二叉树深度:4前序遍历:ABDGECF中序遍历:DGBEACF后序遍历:GDEBFCA

原文地址:https://www.cnblogs.com/51jiaoshou/p/10354793.html

时间: 2024-10-12 07:21:28

Java递归方法遍历二叉树的代码的相关文章

遍历二叉树的三种方法

朋友面试遇到一道笔试题:写出递归遍历二叉树的代码(先序.中序.后序遍历都可以)? 首先要知道二叉树是什么,它的数据结构是怎样的? 如何实现这种二叉树?采用匿名内部类的形式实现 class Node{ //节点数据 private T data; //可比较的泛型 //左子树 private Node leftChildTree; //右子树 private Node rightChildTree; public Node(T data){ this.data = data; } } 知道它的数据

java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能

二叉排序树的定义: 二叉排序树满足以下三个性质(BST性质): <1>若它的左子树非空,则左子树上所有节点的值均小于根节点的值 <2>若它的右子树非空,则右子树上所有节点的值均大于根节点的值 <3>左,右子树本身又各是一棵二叉排序树 根据二叉排序树的BST性质,可以说二叉排序树每个节点上的值(或称关键字)都是唯一的,并且二叉排序树以中序遍历输出的结果必然是一个有序的递增序列. 如下图所示: 用递归方法建立二叉排序树,减少了繁复的比较程序,效率较高.只需要知道每个节点的值

JAVA递归、非递归遍历二叉树(转)

原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(char c) { date = c; } // 先序遍历递归 public static void preOrder(BinTree t) {

java实现二叉树相关代码-----数据结构

接口 /*1.开发时间:2014-11-5  *2.开发者:赵远  *3.维护者:赵远  *3.程序说明:树的接口  *4.注意事项:暂且没有  * **/ package Tree; import Tree.node; public interface TreeNode { // class Node {};  // 1. 求二叉树中的节点个数  int GetNodeNum(node root);  // 2. 求二叉树的深度  int GetDepth(node root);  // 3.

java创建二叉树并递归遍历二叉树

二叉树类代码: package binarytree; import linkqueue.LinkQueue; public class BinaryTree { class Node { public Object data; public Node lchild; public Node rchild; public Node(Object data) { this.data = data; this.lchild = null; this.rchild = null; } } //根节点

JAVA语言实现二叉树的层次遍历的非递归算法及递归算法

/** 二叉树节点 */ public class BTNode { private char key; private BTNode left, right; public BTNode(char key) { this(key, null, null); } public BTNode(char key, BTNode left, BTNode right) { this.key = key; this.left = left; this.right = right; } public ch

非递归遍历二叉树Java实现

2018-10-03 20:16:53 非递归遍历二叉树是使用堆栈来进行保存,个人推荐使用双while结构,完全按照遍历顺序来进行堆栈的操作,当然在前序和后序的遍历过程中还有其他的压栈流程. 一.Binary Tree Preorder Traversal 问题描述: 问题求解: 先序遍历就是在第一次访问到节点的时候将其值进行打印,然后递归打印其左子树,最后递归打印其右子树. 解法一.双while public List<Integer> preorderTraversal(TreeNode

Morris遍历遍历二叉树

遍历二叉树的递归方法使用了函数栈,非递归方法使用了申请的栈, 两者的额外空间都与树的高度有关,所以空间复杂度为O(h),h为二叉树的高度. 可以使用二叉树叶子节点中大量指向null的指针实现空间复杂度O(1)的遍历. Morris遍历的实质就是避免使用栈结构,让下层到上层有指针, 具体是通过让底层节点指向null的空闲指针指回上层的某个节点,从而完成下层到上层的移动. 先序中序后序主要基于两个主要步骤,然后输出的位置有所不同,以中序遍历为例. 中序遍历: 1.假设当前子树的头节点为h,让h的左子

Java数据结构 遍历 排序 查找 算法实现

1. 遍历算法(遍历二叉树6种方法) 1.1. 概述 遍历算法针对二叉树而言的,主要有先序.中序.后序三种遍历顺序,三种顺序又分别有递归和常规算法,二叉树遍历的主要思想是:遍历左子树,遍历右子树,访问根节点,由这三者的遍历顺序来确定是先序.中序还是后序.下面只要求掌握递归遍历算法,常规遍历算法见附录一. 1.2. 先序遍历算法 遍历顺序:访问根节点,遍历左子树,遍历右子树.代码如下: void preOrder(BinaryTreeNode bt) { if (bt == null)// 如果当