二叉树-遍历

196 阅读1分钟

构造如下二叉树

二叉树

前序遍历

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

    TreeNode root = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        TreeNode node8 = new TreeNode(8);
        TreeNode node9 = new TreeNode(9);
        root.left = node2;
        root.right = node3;
        node2.left = node4;
        node2.right = node5;
        node5.left = node7;
        node5.right = node8;
        node3.right = node6;
        node6.left = node9;

采用递归方式


class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        
        List<Integer> resultList = new ArrayList<>();
        h(resultList, root);
        return resultList;
        
    }
    
    
    public void h(List<Integer> list, TreeNode node) {
        if (node == null) {
            return;
        }
        list.add(node.val);
        h(list, node.left);
        h(list, node.right);
    }
    
}

采用循环(迭代)方式

第一种

        TreeNode node = null;
        Stack<TreeNode> stack = new Stack<>();
        node = root;
        while (true) {
            while (node != null) {
                System.out.println(node.val);
                stack.push(node);
                node = node.left;
            }
            if (stack.isEmpty()) {
                break;
            }
            node = stack.pop().right;
        }

第二种

        Stack<TreeNode> stack = new Stack<TreeNode>();
        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            System.out.println("" + node.val);
            if (node.right != null)
                stack.push(node.right);
            if (node.left != null)
                stack.push(node.left);
        }

中序遍历

	public static void midderSort(TreeNode tree) {
			
		if (tree == null) {
			return;
		}
		
		midderSort(tree.left);
		
		System.out.println(tree.val);
		
		midderSort(tree.right);
	}

后序遍历

	public static void midderSort(TreeNode tree) {
			
		if (tree == null) {
			return;
		}
		
		midderSort(tree.left);
		midderSort(tree.right);
		System.out.println(tree.val);
	}

	

层次遍历

算法图解-第六章-广度优先搜索