二叉樹遍歷

package com.wang.learn;

import lombok.Data;

@Data
public class Tree {

    private TreeNode treeNode;
}
package com.wang.learn;

import lombok.Data;

@Data
public class TreeNode {
    private Long value;
    private TreeNode left;
    private TreeNode right;
}
package com.wang.learn;

import java.util.Stack;

public class Main {

    // 遍歷方式1遞歸
    public static void traversingTree(Tree tree) {
        traversingTreeNode(tree.getTreeNode());
    }

    // 遍歷方式2 循環
    public static void traversingTree2(Tree tree) throws InterruptedException {
        Stack<TreeNode> stack = new Stack<>();
        TreeNode treeNode = tree.getTreeNode();

        while (treeNode != null) {
            stack.push(treeNode);
            TreeNode leftNode = treeNode.getLeft();
            if (leftNode == null) {
                TreeNode rightNode = null;
                while (rightNode == null) {
                    if (stack.isEmpty()) {
                        break;
                    }
                    TreeNode node = stack.pop();
                    System.out.println(node.getValue());
                    rightNode = node.getRight();
                }
                treeNode = rightNode;
            }
            else {
                treeNode = leftNode;
            }
        }
    }

    private static void traversingTreeNode(TreeNode treeNode) {
        if (treeNode.getLeft() != null) {
            traversingTreeNode(treeNode.getLeft());
        }
        System.out.println(treeNode.getValue());
        if (treeNode.getRight() != null) {
            traversingTreeNode(treeNode.getRight());
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Tree tree = new Tree();
        TreeNode treeNode = new TreeNode();
        TreeNode treeNode2 = new TreeNode();
        treeNode2.setValue(2l);

        TreeNode treeNode4 = new TreeNode();
        treeNode4.setValue(4l);
        treeNode2.setLeft(treeNode4);

        TreeNode treeNode5 = new TreeNode();
        treeNode5.setValue(5l);
        treeNode2.setRight(treeNode5);

        TreeNode treeNode3 = new TreeNode();
        treeNode3.setValue(3l);

        TreeNode treeNode6 = new TreeNode();
        treeNode6.setValue(6l);
        treeNode3.setLeft(treeNode6);

        TreeNode treeNode7 = new TreeNode();
        treeNode7.setValue(7l);
        treeNode3.setRight(treeNode7);

        treeNode.setLeft(treeNode2);
        treeNode.setRight(treeNode3);
        treeNode.setValue(1l);
        tree.setTreeNode(treeNode);

        // 遍歷二叉樹
        traversingTree2(tree);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章