Java 实现 二叉树的 中序遍历

Posted 龙凌云端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 实现 二叉树的 中序遍历相关的知识,希望对你有一定的参考价值。

Java 实现 二叉树的 中序遍历


 

class Node 
    int val;
    Node left;
    Node right;
    Node(int val) 
        this.val = val;
    


public class BinaryTree /**
     * 中序遍历
     * @param root 节点
     */
    public void inorderTraversal(Node root) 
        if (root != null) 
            inorderTraversal(root.left);
            System.out.print(root.val + " ");
            inorderTraversal(root.right);
        
    

解析:

首先,定义了一个 Node 类表示二叉树的节点。节点包含了一个整型的 val 值,以及左右两个子节点的引用。
然后,定义了 BinaryTree 类,该类包含了一个方法 inorderTraversal,用于实现中序遍历。
后序遍历的顺序是:先遍历左子树,然后遍历根节点,最后遍历右子树。
如果二叉树为空,则直接返回。否则,先输出左子树的值,然后根节点和递归遍历右子树。

使用方法:
首先创建二叉树的节点,然后构建二叉树,最后调用 BinaryTree 类的 inorderTraversal 方法进行中序遍历。
 
测试代码如下:
public class TestTree 
    public static void main(String[] args) 
        // 构建二叉树
        Node root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.left.right = new Node(5);

        // 中序遍历
        BinaryTree bt = new BinaryTree();
        System.out.print("Inorder Traversal: ");
        bt.inorderTraversal(root); // 4 2 5 1 3
    

 

 

PS

Java 实现 二叉树的 前序遍历https://www.cnblogs.com/miracle-luna/p/17368605.html
Java 实现 二叉树的 中序遍历https://www.cnblogs.com/miracle-luna/p/17368610.html
Java 实现 二叉树的 后序遍历https://www.cnblogs.com/miracle-luna/p/17368606.html
 
 

二叉树的中序遍历


二叉树的三种遍历方式,其中每一种遍历方式都有三种实现方式。

节点定义:

struct TreeNode
{
    int val;
    TreeNode *left,*right;
    TreeNode(int val){
        this->val = val;
        this ->left = this->right = NULL;
    }
};

中序遍历

中序遍历:先访问左孩点,然后访问根节点,最后访问右孩子。

所以,上面遍历的结果是:DEAGHCS。

下面,我们来看看具体代码实现

1.递归实现

void InOrder(TreeNode *root){
    if (root==NULL)
        return;
    InOrder(root->left);
    cout<<root->val<<endl;
    InOrder(root->right);
}

2.使用辅助栈

实现思路:

初始化一个二叉树结点pNode指向根结点;

若pNode非空,那么就把pNode入栈,并把pNode变为其左孩子;(直到最左边的结点)

若pNode为空,弹出栈顶的结点,并访问该结点,将pNode指向其右孩子(访问最左边的结点,并遍历其右子树)

具体实现:

void InOrder(TreeNode *root){
    if (root==NULL)
    {
        return;
    }
    stack<TreeNode*> stk;
    TreeNode *pNode = root;
    while(pNode!=NULL || !stk.empty()){
        if (pNode != NULL)
        {
            stk.push(pNode);
            pNode = pNode->left;
        }
        else{
            pNode = stk.pop();
            stk.pop();
            cout<<pNode->val<<endl;
            pNode = pNode->right;
        }
    }
}

附:二叉树的先序遍历

二叉树的先序遍历

附:二叉树的中序遍历

二叉树的中序遍历

附:二叉树的后序遍历

二叉树的后序遍历

附:二叉树的三种遍历对比及用图片展现说明

二叉树的三种遍历对比及用图片展现说明

以上是关于Java 实现 二叉树的 中序遍历的主要内容,如果未能解决你的问题,请参考以下文章

java实现线索化二叉树的前序中序后续的遍历(完整代码)

力扣刷题:二叉树的中序遍历(java实现)

二叉树的前序中序和后续遍历及应用场景

树二叉树遍历算法(深度优先广度优先遍历,前序中序后序层次)及Java实现

二叉树的中序遍历

树的前序遍历与中序遍历构造二叉树和树的中序遍历与后序遍历构造二叉树