中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
察雅县| 屏东市| 绩溪县| 渭源县| 庆元县| 石柱| 龙泉市| 昆山市| 台州市| 凌海市| 西丰县| 资中县| 荣成市| 天峻县| 竹山县| 嘉义市| 秭归县| 易门县| 江阴市| 沙洋县| 贞丰县| 龙胜| 岢岚县| 江源县| 罗定市| 连平县| 攀枝花市| 中卫市| 饶阳县| 甘德县| 重庆市| 涿鹿县| 千阳县| 拉萨市| 潮安县| 库尔勒市| 长武县| 合肥市| 卓尼县| 上高县| 延吉市|