亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

java線索二叉樹遍歷怎么實現

小億
101
2023-08-02 10:43:16
欄目: 編程語言

在Java中,可以使用遞歸或迭代的方式實現二叉樹的遍歷。下面分別介紹這兩種方法。

  1. 遞歸遍歷:

遞歸遍歷二叉樹的過程非常簡單,可以按照先序、中序和后序的順序遞歸遍歷二叉樹。

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
// 先序遍歷
public void preorderTraversal(TreeNode root) {
if (root != null) {
System.out.print(root.val + " ");
preorderTraversal(root.left);
preorderTraversal(root.right);
}
}
// 中序遍歷
public void inorderTraversal(TreeNode root) {
if (root != null) {
inorderTraversal(root.left);
System.out.print(root.val + " ");
inorderTraversal(root.right);
}
}
// 后序遍歷
public void postorderTraversal(TreeNode root) {
if (root != null) {
postorderTraversal(root.left);
postorderTraversal(root.right);
System.out.print(root.val + " ");
}
}
  1. 迭代遍歷:

迭代遍歷二叉樹使用棧來記錄遍歷的節點。具體步驟如下:

import java.util.Stack;
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
// 先序遍歷
public void preorderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.print(node.val + " ");
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}
// 中序遍歷
public void inorderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode curr = root;
while (curr != null || !stack.isEmpty()) {
while (curr != null) {
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
System.out.print(curr.val + " ");
curr = curr.right;
}
}
// 后序遍歷
public void postorderTraversal(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
stack1.push(root);
while (!stack1.isEmpty()) {
TreeNode node = stack1.pop();
stack2.push(node);
if (node.left != null) {
stack1.push(node.left);
}
if (node.right != null) {
stack1.push(node.right);
}
}
while (!stack2.isEmpty()) {
System.out.print(stack2.pop().val + " ");
}
}

以上就是Java實現二叉樹遍歷的方法,根據不同的需求選擇遞歸或迭代的方式來遍歷二叉樹。

0
菏泽市| 乐业县| 建德市| 浪卡子县| 宁强县| 临夏市| 岚皋县| 合川市| 邳州市| 崇礼县| 黑水县| 寿光市| 营口市| 县级市| 枞阳县| 冷水江市| 克山县| 宜州市| 称多县| 休宁县| 淮阳县| 翁牛特旗| 保靖县| 丁青县| 新平| 葵青区| 西盟| 兰州市| 加查县| 咸阳市| 遂宁市| 眉山市| 泰安市| 隆尧县| 察哈| 乐山市| 杭州市| 大关县| 晋江市| 盐池县| 鹤壁市|