java手写二叉树,前序、中序、后序遍历
/**
* Created by 码上风云 on 2020/10/7.
*/
class Node<T> {
public Node left, right;
public T data;
//创建空节点
public Node() {
data = null;
left = null;
right = null;
}
//创建一个二叉树结点
public Node(T x) {
this.data = x;
left = null;
right = null;
}
}
public class Tree<T> {
public Node<T> root;
public Tree(Node root) {
this.root = root;
}
//创建一颗空二叉树
public Tree() {
this.root = new Node<T>();
}
//生产一颗二叉树
public Tree(T x) {
this.root = new Node<T>(x);
}
//插入左节点
public boolean insertLeft(T x, Node<T> parent) {
if (parent == null) {
return false;
}
Node<T> p = new Node<T>(x);
if (parent.left == null) {
parent.left = p;
} else {
p.left=parent.left;
parent.left=p;
}
return true;
}
public boolean insertRight(T x,Node<T> parent){
if(parent==null){
return false;
}
Node<T> p=new Node<T>(x);
if (parent.right==null){
parent.right=p;
}else {
p.right=parent.right;
parent.left=p;
}
return true;
}
//先序遍历 根节点→左节点→右节点
public void preOrder(Node<T> node){
if (node==null){
return;
}
System.out.print(node.data+" ");
preOrder(node.left);
preOrder(node.right);
}
// 中序遍历 左节点→根节点→右节点
public void midOrder(Node<T> node){
if(node==null){
return;
}
midOrder(node.left);
System.out.print(node.data+" ");
midOrder(node.right);
}
// 后序遍历 左节点→右节点→根节点
public void endOrder(Node<T> node){
if(node==null){return;}
endOrder(node.left);
endOrder(node.right);
System.out.print(node.data+" ");
}
public static void main(String[] args) {
Tree<Integer> tree=new Tree<>(2);
System.out.println(tree.insertLeft(5,tree.root));
System.out.println(tree.root.left.data);
tree.insertRight(3,tree.root);
System.out.println(tree.root.right.data);
System.out.println("\n-----------先序遍历----------");
tree.preOrder(tree.root);
System.out.println("\n--------------中序遍历---------------");
tree.midOrder(tree.root);
System.out.println("\n--------------中序遍历---------------");
tree.endOrder(tree.root);
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-36303.html