java二叉树遍历递归和非递归_Java二叉树实现及递归与非递归遍历实现

import java.util.*;/*** 类功能描述: 二叉树遍历算法Java实现

*

*@version1.0.0

* @auther Create by Barry

* @date Create on 2018/3/12.

* @history*/

public classBinaryTree {privateNode root;privateBinaryTree(Object data){this.root = new Node(data, null, null);

}/*** 1、 深度优先遍历

* 1.1 递归先序遍历*/

public voidpreOrderTraverse(Node root){

System.out.println(root.data);

preOrderTraverse(root.leftChild);

preOrderTraverse(root.rightChild);

}/*** 1、 深度优先遍历

* 1.2 实现非递归先序遍历*/

public voidpreOrder(){

Stack stack= newStack();

System.out.println(root.data);

stack.push(root);while(!stack.isEmpty()){

Node element=(Node)stack.pop();

System.out.println(element.data);if(element.rightChild != null){

stack.push(element.rightChild);

}if(element.leftChild != null){

stack.push(element.leftChild);

}

}

}/*** 2、 广度优先遍历*/

public ListbreadthTraverse(Node root){

List allNodes = new LinkedList<>();if(root == null){returnallNodes;

}

Deque queue = new ArrayDeque<>();

queue.add(root);while(!queue.isEmpty()){

Node currentNode=queue.poll();

allNodes.add(currentNode);if(currentNode.leftChild != null){

queue.add(currentNode.leftChild);

}if(currentNode.rightChild != null){

queue.add(currentNode.rightChild);

}

}returnallNodes;

}classNode{privateObject data;privateNode leftChild;privateNode rightChild;publicNode(Object data, Node leftChild, Node rightChild){this.data =data;this.leftChild =leftChild;this.rightChild =rightChild;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值