二叉树遍历(先序遍历、中序遍历、后序遍历)——递归方法和非递归方法

来源:互联网 发布:知乎宣传片 编辑:程序博客网 时间:2024/04/30 12:58

注:本文来自 左程云的书《程序员代码面试指南》


题目:

        分别用递归和非递归方法,实现二叉树的先序遍历(根左右)、中序遍历(左根右)、后序遍历(左右根)。

// 二叉树节点class Node {public int value;public Node left;public Node right;public Node(int value) {this.value = value;}}


1、递归方式Recursion
(1)先序遍历

public void preOrderRecur(Node root) {if(root == null) {return;}//先输出根节点的值System.out.println(root.value + " ");//递归左子树preOrderRecur(root.left);//递归右子树preOrderRecur(root.right);}


(2)中序遍历

public void inOrderRecur(Node root) {if(root == null) {return;}inOrderRecur(root.left);System.out.println(root.value + " ");inOrderRecur(root.right);}


(3)后序遍历

public void posOrderRecur(Node root) {if(root == null) {return;}posOrderRecur(root.left);posOrderRecur(root.right);System.out.println(root.value + " ");}


2、非递归方式UnRecursion

使用自定义的栈来代替递归栈。
(1)先序遍历

public void preOrderUnRecur(Node root) {if(root != null) {Node curNode = root;//当前节点Stack<Node> stack = new Stack<>();//辅助栈stack.add(root);while(!stack.isEmpty()) {curNode = stack.pop();System.out.println(curNode.value + " ");if(curNode.right != null) {stack.push(curNode.right);}if(curNode.left != null) {stack.push(curNode.left);}}}}

(2)中序遍历

public void inOrderUnRecur(Node root) {if(root != null) {Node curNode = root;//当前节点Stack<Node> stack = new Stack<>();//辅助栈while(!stack.isEmpty() || curNode != null) {if(curNode != null) {stack.push(curNode);curNode = curNode.left;}else {curNode = stack.pop();//输出System.out.println(curNode.value + " ");curNode = curNode.right;}}}}

(3)后序遍历

方法一:使用 两个 辅助栈

public void posOrderUnRecur(Node root) {if(root != null) {Node curNode = root;//当前节点Stack<Node> stack1 = new Stack<>();Stack<Node> stack2 = new Stack<>();stack1.push(curNode);while(!stack1.isEmpty()) {curNode = stack1.pop();stack2.push(curNode);if(curNode.left != null) {stack1.push(curNode.left);}if(curNode.right != null) {stack1.push(curNode.right);}}//弹出stack2中所有元素while(!stack2.isEmpty()) {System.out.println(stack2.pop().value + " ");}}}


方法二:使用一个辅助栈

//TODO


阅读全文
0 0
原创粉丝点击