public class PostView {
// 1
// 2 3
// 4 5 6 7
public static void main(String[] args) {
TreeNode n4 = new TreeNode(4, null, null);
TreeNode n5 = new TreeNode(5, null, null);
TreeNode n6 = new TreeNode(6, null, null);
TreeNode n7 = new TreeNode(7, null, null);
TreeNode n2 = new TreeNode(2, n4, n5);
TreeNode n3 = new TreeNode(3, n6, n7);
TreeNode n1 = new TreeNode(1, n2, n3);
System.out.println(postOrder(n1));
System.out.println(postRecurve(n1));
}
static class TreeNode {
int val;
TreeNode left, right;
public TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
static List<Integer> resList = new ArrayList<>();
public static List<Integer> postRecurve(TreeNode root) {
if (root == null) {
return resList;
}
postRecurve(root.left);
postRecurve(root.right);
resList.add(root.val);
return resList;
}
public static List<Integer> postOrder(TreeNode root) {
List<Integer> res = new ArrayList<>();
if (root == null) {
return res;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode prev = null;
while (!stack.isEmpty() || root != null) {
//左子节点入栈
while (root != null) {
stack.push(root);
root = root.getLeft();
}
TreeNode cur = stack.pop();
if (cur.getRight() == null || cur.getRight() == prev) {
res.add(cur.getVal());
prev = cur;
} else {
stack.push(cur);
root = cur.getRight();
}
}
return res;
}
}
【算法】二叉树后序遍历(递归+非递归)
最新推荐文章于 2024-09-21 19:25:16 发布