値が x であるノードのサブツリーを削除するためのデータ構造とアルゴリズム

値が x であるノードのサブツリーを削除します

トピック

二分木が二分連結リストに格納されていることがわかっており、アルゴリズムが完成しました。木の要素値が x である各ノードについて、それをルートとする部分木を削除し、対応するスペースを解放します。

アイディア

  • 要素値 x をルートとするサブツリーを削除するには、その左右のサブツリーを削除できる限り、値 x のルート ノードを解放できるため、ポスト オーダー トラバーサルを使用することをお勧めします。【プレ・ミドル・シーケンシャル】
  • **アルゴリズムのアイデア: **値が x のノードを削除すると、その親ノードの左 (右) の子ポインターが空になる必要があり、階層トラバーサルを使用してノードの親ノードを簡単に見つけることができます。この質問では、要素値が × であるノードのサブツリーをツリーで削除する必要があるため、完全なバイナリ ツリーをトラバースする必要があります。【BFS】

コーディング

/**
 * 删除当前结点
 *
 * @param root 根节点
 */
public void removeChildNodes(TreeNode root) {
    
    
    if (root != null) {
    
    
        removeChildNodes(root.left);
        removeChildNodes(root.right);
	//这里我假设val=-1就是无效结点,也就是被删除了
        root.val = -1;
    }
}

/**
 * 搜索结点值为x的元素
 *
 * @param root 根元素
 * @param x    要比对的值
 */
public void searchNodesAndDel(TreeNode root, int x) {
    
    
    if (root != null) {
    
    
        if (root.val == x) {
    
    
            removeChildNodes(root.left);
            //root.left = null;
            removeChildNodes(root.right);
            //root.right = null;
        }
        searchNodesAndDel(root.left, x);
        searchNodesAndDel(root.right, x);
    }
}

おすすめ

転載: blog.csdn.net/qq_45074341/article/details/126902602