我创建了一个基本上具有二叉树的程序,可以在其中删除/插入节点。我也可以计算它的遍历,但是我想以真实形式打印树。我的意思是。 程序现在打印:1 2 3 4
我要打印:
from bs4 import BeautifulSoup
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
driver = webdriver.Chrome('/Users/user/Documents/docs/chromedriver')
url = driver.get('https://getnada.com')
element = driver.find_elements(By.CSS_SELECTOR, 'span.address.what_to_copy')
print(element)
这当然是可行的,但是我的时间很短。请提供解决此问题的方法。 (是的,我知道要求解决方案很多)。 在我的代码中,我注释了以下行,在这些行中调用了打印结果的函数。注释看起来像这样“ //我想将其打印为树” 这些是计算和打印树的行。我只想制作它们,以便它们打印出一棵真正的树。
我的代码:
1
/ \
2 3
/
4
答案 0 :(得分:0)
问题是您需要具有2^maxDepth
方形框才能正确绘制节点。
在(0,(2^maxDepth)/2)
点处绘制根,并且
随后的子节点位于((1,(parent node position)/2), ((parent node positon)/2, 1)
位置。
请考虑以下示例代码。
int maxDepth(node* node)
{
if (node==NULL)
return 0;
else
{
/* compute the depth of each subtree */
int lDepth = maxDepth(node->left);
int rDepth = maxDepth(node->right);
/* use the larger one */
if (lDepth > rDepth)
return(lDepth+1);
else return(rDepth+1);
}
}
void drawTree(node *node)
{
int maxdepth = maxDepth(node);
int numSpace = pow(2,maxdepth)+1;
int i = 0;
for (i = 0;i < maxdepth;i++)
{
printGraph(node, numSpace, 1, i, 0);
numSpace /=2;
printf("\n");
}
}
int printGraph(node *node, int numSpace,int isLeft, int expectedLevel, int currentLevel)
{
int i = 0;
if (node == NULL || currentLevel > expectedLevel)
{
for (i = 0;i<(numSpace)/2;i++) printf(" ");
return -1;
}
if (expectedLevel == currentLevel)
{
for (i = 0;i<(numSpace)/2;i++) printf(" ");
printf("%d", node->data);
}
else
{
printGraph(node->left, numSpace, 1, expectedLevel, currentLevel+1);
for (i = 0;i<(numSpace)/2;i++) printf(" ");
printGraph(node->right, (numSpace), 0, expectedLevel, currentLevel+1);
return ret;
}
}
我从drawTree
叫main
,如下所示。
void main()
{
node *root;
node *tmp;
//int i;
root = NULL;
/* Inserting nodes into tree */
insert(&root, 9);
insert(&root, 4);
insert(&root, 15);
insert(&root, 6);
insert(&root, 12);
insert(&root, 17);
insert(&root, 2);
insert(&root, 0);
insert(&root, 7);
insert(&root, 16);
insert(&root, 18);
drawTree(root);
deltree(root);
}
示例输出:
9
4 15
2 6 12 17
0 7 16 18
注意:现在继续向具有相同边界的节点添加边 方法。