https://oj.leetcode.com/problems/binary-tree-postorder-traversal/
这个题目是用迭代的方式对树进行后根遍历,需要记录一个一个节点是否左右两个子树都已经遍历过了。
public class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
class Node{
boolean right,left;
TreeNode treeNode;
public Node(TreeNode node) {
// TODO Auto-generated constructor stub
right=false;
left=false;
treeNode = node;
}
}
ArrayList<Integer>arrayList = new ArrayList<Integer>();
Stack<Node>stack = new Stack<Node>();
if(root==null)return arrayList;
Node node = new Node(root);
Node tempNodes;
stack.push(node);
while (!stack.empty()) {
node = stack.peek();
if(node.treeNode.left!=null&&node.left==false){
node.left = true;
TreeNode lefTreeNode = node.treeNode.left;
while(lefTreeNode!=null){
tempNodes = new Node(lefTreeNode);
tempNodes.left = true;
stack.push(tempNodes);
lefTreeNode = lefTreeNode.left;
}
}
else{
if(node.treeNode.right!=null&&node.right==false){
node.right=true;
TreeNode rightNode = node.treeNode.right;
tempNodes = new Node(rightNode);
stack.push(tempNodes);
}
else{
arrayList.add(node.treeNode.val);
stack.pop();
}
}
}
return arrayList;
}
}
本文介绍了一种使用迭代方式实现二叉树后根遍历的方法。通过自定义节点类来跟踪每个节点的状态,确保了遍历过程中正确地访问左子树、右子树和根节点。此算法适用于LeetCode上的相关题目。
1363

被折叠的 条评论
为什么被折叠?



