标签: binary-tree

每个级别的链接树节点

给定二叉树,您将如何从左到右加入每个级别的节点.假设第3级有5个节点,从左到右连接所有节点.

我不需要任何人为此编写代码..但只是一个有效的算法.

谢谢

algorithm binary-tree

4
推荐指数
1
解决办法
6067
查看次数

这是一个完整的二叉树吗?

在此输入图像描述

如果这是一个完整的二叉树,为什么以下不是?

在此输入图像描述

algorithm binary-tree data-structures

4
推荐指数
1
解决办法
751
查看次数

std :: map唯一的std :: less <>函数,用于将2D点作为键

好吧,经过四个小时的调试,我很困惑,我发现了问题的原因......

我正在制作一些程序,在std :: map中保存一些点并在窗口中渲染它们.但奇怪的是,有些观点无法进入地图.

std::map<Point2, Prop*> m_Props_m;

void AddProp(std::pair<Point2, Prop*> p)
{
    m_Props_m.insert(p);
}

struct Point2
{
unsigned int Point2::x;
unsigned int Point2::y;
//--------
Point2::Point2()
    :x(0)
    ,y(0)
{}

bool Point2::operator< (const Point2& b) const
{
    return ( x+y < b.x+b.y );
}

bool Point2::operator> (const Point2& b) const
{
    return ( x+y > b.x+b.y );
}
};
Run Code Online (Sandbox Code Playgroud)

感谢上帝,我对二叉树有一些经验,所以我可以找出问题的原因.

想象一下,我们有2个Point2.

Point2 a(0,1);
Point2 b(1,0);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,使用operator <方法我已经写过它会返回false,而operator>也会返回false.因此,如果a已经在地图中,并且插入了b,则插入失败.

现在,这一切都很好,但我该如何解决这个问题呢?有没有什么方法可以让2D点的运算符少于允许我存储地图中每个唯一点的运算符?

c++ binary-tree stl std

4
推荐指数
1
解决办法
2574
查看次数

霍夫曼代码编码遍历

我正在尝试对霍夫曼树进行编码.我的树是对的.我只需要弄清楚如何修复我的递归函数来正确创建表.感谢您提供的任何帮助.

struct Code
{
   char letter;
   string code;
};

void createCode(BTree<Data>* root,string codeStr,vector<Code> &table)
{
   if (root->getRightChild() == NULL && root->getLeftChild() == NULL)
   {
      Code code;
      code.letter = root->getData().getLetter();
      code.code = codeStr;
      table.push_back(code);
   }
   else
   {
      createCode(root->getLeftChild(), codeStr.append("1"),table);
      createCode(root->getRightChild(), codeStr.append("0"),table);
   }
}
Run Code Online (Sandbox Code Playgroud)

c++ binary-tree tree-traversal

4
推荐指数
1
解决办法
2864
查看次数

二叉树元素的递归printf

我回到K&R是为了阅读一章,并注意到我之前省略的一个例子.本章介绍二叉树数据类型的主题.我知道在节点中存储新条目,但打印功能让我感到困惑.为什么首先打印左侧部分?

如果它printf是功能中的第一个命令,其次是左和右,它会工作吗?

如果没有 - 为什么呢?

/* treeprint: in-order print of tree p */
void treeprint(struct tnode *p)
{
    if (p != NULL) {
        treeprint(p->left);
        printf("%4d %s\n", p->count, p->word);
        treeprint(p->right);
    }
}
Run Code Online (Sandbox Code Playgroud)

c binary-tree kernighan-and-ritchie

4
推荐指数
1
解决办法
6128
查看次数

二叉树高度函数

我正在开发一个函数来查找二叉搜索树的高度.我找到了一个似乎应该工作的方法,但我一直得到这个错误,我不知道它有什么问题:PA5.exe中0x00903417处的未处理异常:0xC0000005:访问冲突读取位置0x00000004.

这是我的身高功能......

template <class T>
int BST<T>::height()
{

    return displayHeight(mRootNode);    

}

template <class T>
int BST<T>::displayHeight(BST<T> *node)
{
    if (node = NULL)
    {
        return 0;
    }

    int left = displayHeight(node->mLeft);
    int right = displayHeight(node->mRight); 

    if (left > right)
        return 1 + left;
    else
        return 1 + right;
}
Run Code Online (Sandbox Code Playgroud)

这是主要功能的实现......

 cout << endl << "height: " << tree.height();
Run Code Online (Sandbox Code Playgroud)

如果我应该包括其他任何内容,请告诉我.谢谢!

c++ binary-tree data-structures

4
推荐指数
1
解决办法
1万
查看次数

如何对二叉树进行尾递归?

如果你有一个二叉树,你如何使用尾递归迭代(按顺序)?我知道尾部递归涉及您在迭代时计算新值,然后当您到达基本情况时,您只需返回累积.但是当你必须调用函数调用两次时,如何为树执行此操作?

language-agnostic recursion binary-tree tail-recursion

4
推荐指数
1
解决办法
3042
查看次数

二叉树实现C++

二叉树插入:

#include "stdafx.h"
#include <iostream>

using namespace std;

struct TreeNode {
  int value;
  TreeNode* left;
  TreeNode* right;
};

struct TreeType {
  TreeNode* root;

  void insert(TreeNode* tree, int item);

  void insertItem(int value) {
    insert(root, value);
  }
};

void TreeType::insert(TreeNode* tree, int number) {
  if (tree == NULL) {
    tree = new TreeNode;
    tree->left = NULL;
    tree->right = NULL;
    tree->value = number;
    cout << "DONE";
  } else if (number < tree->value) {
    insert(tree->left, number);
  } else {
    insert(tree->right, number);
  }
}

int …
Run Code Online (Sandbox Code Playgroud)

c++ tree binary-tree

4
推荐指数
2
解决办法
5万
查看次数

如何使用二叉树中的recusrion完成回溯

我正在尝试插入二进制节点.我的代码很复杂,没有希望拯救它,所以我打算重写它(基本上我没有考虑回溯,并没有考虑所有密切关注的算法).

我正在尝试使用顺序遍历插入二进制节点,但我不明白我应该如何回溯.

     D
    / \
   B   E 
  / \ / \
 A  C F 
Run Code Online (Sandbox Code Playgroud)

我如何搜索根D的左子树,然后返回并搜索正确的子树?这可能是一个愚蠢的问题,但我很难过.我能想到的最好的是这样的:

 if (!root.hasLeftChild) {
      root = root.getLeftChild(); 
      recurse(root); 
 } 
Run Code Online (Sandbox Code Playgroud)

但是当我到达底部时,我无法回到根部.此外,它没有解决问题,如果我到达左下方节点,我必须在开始回溯之前填充该节点的两个子节点.

我想我正在以错误的方式思考这个问题.

java recursion binary-tree

4
推荐指数
1
解决办法
3885
查看次数

你可以根据预先订购的二进制序列/顺序绘制二叉树吗?

二叉树(以及因此有序的森林)可以表示为二进制字符串.二进制字符串是通过预先遍历二叉树获得的,每个节点记录1,每个空子树记录一个0(空链接).

这意味着如果我给了一个二叉树,我可以进行前序遍历并生成二进制序列表示.

相反也可能吗?如果我给出了这个二进制序列11011000101101010001,我可以绘制二叉树吗?

binary-tree huffman-code data-structures

4
推荐指数
1
解决办法
691
查看次数