LeetCodeブラッシングノート_94。バイナリツリーの順序トラバーサル

トピックはLeetCodeからです

94.二分木の順序トラバーサル

他のソリューションまたはソースコードにアクセスできます: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;
}

おすすめ

転載: blog.csdn.net/weixin_42249196/article/details/108414622