トピックはLeetCodeからです
他のソリューションまたはソースコードにアクセスできます:tongji4m3
解説
二分木が与えられると、その中間順序のトラバーサルを返します。
例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
アイデア
反復:スタック方式を使用するという考え方は、再帰に似ています。最初に左から最後まで移動し、移動できない場合は、1つ前の正方形に戻って現在の要素を追加します。次に、現在の要素の右側のノードを引き続き表示します。ノードを終了したら、1つ前のグリッドに戻ります。ルートノードが完成するまで。
細部
コード
//递归
public List<Integer> inorderTraversal(TreeNode root)
{
List<Integer> result = new LinkedList<>();
recursive(root, result);
return result;
}
private void recursive(TreeNode node, List<Integer> result)
{
if(node==null)
{
return;
}
recursive(node.left,result);
result.add(node.val);
recursive(node.right,result);
}
//迭代
public List<Integer> inorderTraversal(TreeNode root)
{
List<Integer> result = new LinkedList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode current = root;
//current!=null 代表了还存在右节点
//!stack.isEmpty() 代表了存在父节点
//当然开始时只是看根节点
while(current!=null || !stack.isEmpty())
{
while(current!=null)
{
stack.push(current);
current = current.left;
}
current = stack.pop();
result.add(current.val);
current = current.right;
}
return result;
}