恢复树以及查询

Given a binary tree with the following rules

  • root.val = 0​
  • If treeNode.val == x and treeNode.left != null, then treeNode.left.val = 2 * x + 1​
  • If treeNode.val == x and treeNode.right != null, then treeNode.right.val = 2 * x + 2​

Now the binary tree is reseted, which means all treeNode.val have been changed to -1.​

Implement the TreeRecover class:​

  • TreeRecover(TreeNode* root) Initializes the object with a reseted binary tree and recovers it.​
  • bool exists(int target) Returns true if the target value exists in the recovered binary tree.​
package main

import "fmt"

type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
}

func f1(t *TreeNode, v int) {
    t.Val = v

    if t.Left != nil {
        f1(t.Left, 2 * t.Val + 1)
    }

    if t.Right != nil {
        f1(t.Right, 2 * t.Val + 2)
    }

}

func (t *TreeNode)TreeRecover() {
    f1(t, 0)
}