數據結構二叉樹的遍歷代碼,java數據結構編寫二叉樹_java 數據結構與算法 BinaryTree二叉樹編寫

 2023-11-18 阅读 22 评论 0

摘要: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

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);

}

}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/176676.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息