import java.util.Stack;
public class BinaryTree {
TreeNode root = null;
public BinaryTree() {
this.root = new TreeNode("A");
數據結構二叉樹的遍歷代碼。}
/*
* 構建二叉樹
* A
* B C
* D E F
數據結構二叉樹遍歷,*/
public void createTree() {
TreeNode nodeb = new TreeNode("B");
TreeNode nodec = new TreeNode("C");
TreeNode noded = new TreeNode("D");
TreeNode nodee = new TreeNode("E");
二叉樹的中序遍歷算法。TreeNode nodef = new TreeNode("F");
root.leftchild = nodeb;
root.rightchild = nodec;
nodeb.leftchild = noded;
nodeb.rightchild = nodee;
nodec.rightchild = nodef;
java二叉樹遍歷算法?}
/*
* 構建另外一個二叉樹來測試代碼是否正確
* A
* B C
* D E F G
java遍歷二叉樹。* H I J K
*/
public void createTestTree() {
TreeNode nodeb = new TreeNode("B");
TreeNode nodec = new TreeNode("C");
TreeNode noded = new TreeNode("D");
二叉樹的數據結構、TreeNode nodee = new TreeNode("E");
TreeNode nodef = new TreeNode("F");
TreeNode nodeg = new TreeNode("G");
TreeNode nodeh = new TreeNode("H");
TreeNode nodei = new TreeNode("I");
TreeNode nodej = new TreeNode("J");
java構建二叉樹。TreeNode nodek = new TreeNode("K");
root.leftchild = nodeb;
root.rightchild = nodec;
nodeb.leftchild = noded;
nodeb.rightchild = nodee;
noded.leftchild = nodeh;
java 二叉樹。nodee.leftchild = nodei;
nodec.leftchild = nodef;
nodec.rightchild = nodeg;
nodef.rightchild = nodej;
nodeg.leftchild = nodek;
}
數據結構二叉樹深度算法?/*
* 求二叉樹的高度
*/
public int getHeight() {
return getHeight(this.root);
}
數據結構二叉樹的深度怎么看?private int getHeight(TreeNode r) {
if(r == null) {
return 0;
}
else {
int heightL = getHeight(r.leftchild);
java實現簡單的二叉樹?int heightR = getHeight(r.rightchild);
return (heightL > heightR) ? (heightL+1): (heightR+1);
}
}
/*
* 求二叉樹節點個數
創建二叉樹的代碼java、*/
public int getSize() {
return getSize(this.root);
}
private int getSize(TreeNode r) {
if(r == null) {
二叉樹的四種遍歷算法。return 0;
}
else {
return 1 + getSize(r.leftchild) + getSize(r.rightchild);
}
}
二叉樹深度算法java?/*
* 前序遍歷
*/
public void preOrder(TreeNode node) {
if(node == null) {
return;
數據結構二叉樹三種遍歷?}
else {
System.out.print(node.value + " ");
preOrder(node.leftchild);
preOrder(node.rightchild);
}
java二叉樹的先序,}
/*
* 中序遍歷
*/
public void inOrder(TreeNode node) {
if(node == null) {
中序、return;
}else {
inOrder(node.leftchild);
System.out.print(node.value + " ");
inOrder(node.rightchild);
}
}
/*
* 后序遍歷
*/
public void postOrder(TreeNode node) {
if(node == null) {
return;
}else {
postOrder(node.leftchild);
postOrder(node.rightchild);
System.out.print(node.value + " ");
}
}
/*
* 用非迭代方法實現前序遍歷,用棧
* tip 判斷棧是否為空 不能用 a != null, 應該用 !a.isEmpty()
*/
public void preOrderInStack(TreeNode node) {
Stack> a = new Stack<>();
if(node == null) {
System.out.println("空樹");
}else {
a.push(node);
while(!a.isEmpty()) {
TreeNode b = a.pop();
System.out.print(b.value + " ");
if(b.rightchild != null) {
a.push(b.rightchild);
}
if(b.leftchild != null) {
a.push(b.leftchild);
}
}
}
}
/*
* 用非迭代方法實現中序遍歷
*/
public void inOrderInStack(TreeNode node) {
Stack> a = new Stack<>();
if(node == null) {
System.out.println("空樹");
}else {
a.push(node);
TreeNode b = a.peek();
while(b.leftchild != null) {
a.push(b.leftchild);
b = a.peek();
}
while(!a.isEmpty()) {
TreeNode c = a.peek();
if(c.leftchild == null || c.leftchild.isChecked == true) {
a.pop();
c.isChecked = true;
System.out.print(c.value + " ");
}else {
a.push(c.leftchild);
continue;
}
if(c.rightchild != null) {
a.push(c.rightchild);
}
}
}
}
/*
* 用非迭代方法實現后序遍歷
*/
public void postOrderInStack(TreeNode node) {
Stack> a = new Stack<>();
if(node == null) {
System.out.println("空樹");
}else {
a.push(node);
TreeNode b = a.peek();
while(b.leftchild != null) {
a.push(b.leftchild);
b = a.peek();
}
while(!a.isEmpty()) {
TreeNode c = a.peek();
if(c.rightchild != null && c.rightchild.isChecked == false) {
a.push(c.rightchild);
}
if(c.leftchild != null && c.leftchild.isChecked == false) {
a.push(c.leftchild);
}
if(c != a.peek()) {
continue;
}else {
a.pop();
c.isChecked = true;
System.out.print(c.value + " ");
}
}
}
}
/*
* 進行非迭代的中序或者后序遍歷以后,要從新把元素的isChecked屬性設置為false,以避免影響另外一個遍歷
*/
public void unchecked(TreeNode node) {
if(node == null) {
return;
}else {
node.isChecked = false;
unchecked(node.leftchild);
unchecked(node.rightchild);
}
}
public class TreeNode{
private E value;
private TreeNode leftchild;
private TreeNode rightchild;
private boolean isChecked;
public TreeNode(E val) {
this.value = val;
this.leftchild = null;
this.rightchild = null;
this.isChecked = false;
}
public E getValue() {
return value;
}
public void setValue(E value) {
this.value = value;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
BinaryTree tree = new BinaryTree();
tree.createTestTree();
TreeNode r = tree.root;
System.out.println(tree.getHeight());
System.out.println(tree.getSize());
tree.preOrder(r);
System.out.print("\n");
tree.inOrder(r);
System.out.print("\n");
tree.postOrder(r);
System.out.print("\n");
tree.preOrderInStack(r);
System.out.print("\n");
tree.inOrderInStack(r);
System.out.print("\n");
tree.unchecked(r);
tree.postOrderInStack(r);
}
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态