tree = [1, 2, 3, 4, None, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
def middle_traversal(tree: list) -> list:
l = []
s = []
node = tree[0]
while s or node:
while node:
s.append(node)
if (tree.index(node) + 1) * 2 - 1 >= len(tree):
node = None
else:
node = tree[(tree.index(node) + 1) * 2 - 1]
if len(s) > 0:
l.append(s[-1])
if (tree.index(s[-1]) + 1) * 2 - 1 >= len(tree):
node = None
else:
node = tree[2 * (tree.index(s[-1]) + 1)]
s.pop()
return l
print(middle_traversal(tree))
public static class TreeNode
{
int data;
TreeNode left;
TreeNode right;
TreeNode(int val)
{
data = val;
}
}
/**
*非递归
*/
public List<Integer> inorderTraversal(TreeNode root)
{
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
while (root != null || !stack.isEmpty())
{
while (root != null)
{
stack.push(root);
root = root.left;
}
if (!stack.isEmpty())
{
list.add(stack.peek().data);
root = stack.peek().right;
stack.pop();
}
}
return list;
}
非递归的二叉树中序遍历
list中某一结点
左子树在列表中的下标(n+1)x2-1
右子树在列表中的下标(n+1)x2