hymn

忽有故人心头过,回首山河已是秋。

  menu
132 文章
0 浏览
9 当前访客
ღゝ◡╹)ノ❤️

二叉树遍历

image.png

代码:

package tree;

import java.util.Arrays;
import java.util.LinkedList;

/**
 * @author: daixyhymn
 * @description: 二叉树
 * @date: 2020/11/3 10:16
 */
public class TreeNode {
  int data;
  TreeNode leftNode;
  TreeNode rightNode;

  TreeNode(int data){
    this.data = data;
  }
}

class Test{
  /**
   * 构建二叉树
   * @param inputList  链表中的空值,代表二叉树的节点左孩子和有孩子为空的情况。
   * @return
   */
  public static TreeNode createBinaryTree(LinkedList<Integer> inputList){
    TreeNode node = null;
    if(inputList == null || inputList.isEmpty()){
      return null;
    }
    Integer data = inputList.removeFirst();
    if(data != null){
      node = new TreeNode(data);
      node.leftNode = createBinaryTree(inputList);
      node.rightNode = createBinaryTree(inputList);
    }
    return node;
  }

  /**
   * 前序遍历
   * @param node
   */
  public static void preOrderTraveral(TreeNode node){
    if(node == null){
      return;
    }
    System.out.println(node.data);
    preOrderTraveral(node.leftNode);
    preOrderTraveral(node.rightNode);
  }
  /**
   * 前序遍历栈实现
   * @param root
   */
  public static void preOrderTraveralWhitStack(TreeNode root){
    Stack<TreeNode> stack = new Stack<>();
    TreeNode treeNode = root;
    while (treeNode != null || !stack.isEmpty()){
      // 迭代左节点,并入栈
      while (treeNode != null){
        System.out.println(treeNode.data);
        stack.push(treeNode);
        treeNode = treeNode.leftNode;
      }
      // 如果没有左节点,弹出栈顶,访问右节点
      if (!stack.isEmpty()){
        treeNode = stack.pop();
        treeNode = treeNode.rightNode;
      }
    }
  }
  /**
   * 中序遍历
   * @param node
   */
  public static void inOrderTraveral(TreeNode node){
    if (node == null){
      return;
    }
    inOrderTraveral(node.leftNode);
    System.out.println(node.data);
    inOrderTraveral(node.rightNode);
  }

  /**
   * 后续遍历
   * @param node
   */
  public static void postOrderTraveral(TreeNode node){
    if (node == null){
      return;
    }
    postOrderTraveral(node.leftNode);
    postOrderTraveral(node.rightNode);
    System.out.println(node.data);
  }

  public static void main(String[] args) {
    LinkedList<Integer> inputList = new LinkedList<>(Arrays.asList(
                                  new Integer[]{3,2,9,null,null,10,null,null,8,null,4}));
    TreeNode treeNode = createBinaryTree(inputList);
    System.out.println("前");
    preOrderTraveral(treeNode);

    System.out.println("中");
    inOrderTraveral(treeNode);

    System.out.println("后");
    postOrderTraveral(treeNode);
  }
}

// 输出
// 前
// 3 2 9 10 8 4
// 中
// 9 2 10 3 8 4
// 后
// 9 10 2 4 8 3


标题:二叉树遍历
作者:hymn
地址:https://dxyhymn.com/articles/2020/11/03/1604372199221.html